如何检查是否sqlite数据库文件是可写的web进程在我的Yii2应用程序


How to check if sqlite database file is writable by the web process in my Yii2 application?

我正在开发一个Yii2应用程序,有时,我用于数据库的Sqlite3文件变成"只读"(由于服务器上发生的其他事情),用户得到讨厌的PHP异常错误,而不是一个很好的显示错误消息。我试图使用"beforeave()"函数来检查数据库是否可写,但我不知道检查web进程(www-data)是否具有写访问权限的最佳方法。有人有什么想法吗?在我的基本模型中有以下两个函数:

    public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            // Check if database is writable
            if($this->attemptDBWrite())
                return true;
            else
            {
                'Yii::$app->getSession()->setFlash('error', 'Database is not writable by the application user');
                return false;
            }
        } else {
            return false;
        }
    }

和"attemptDBWrite()"函数:

    public function attemptDBWrite()
    {
        try {
            $connection = 'Yii::$app->db;
            // SOME CODE NEEDED HERE TO CHECK <<<=========
        } catch ('yii'db'Exception $e) {
            'Yii::$app->getSession()->setFlash('error', var_dump($e));
            return false;
        }
    }
 public function attemptDBWrite()
    {
        try {
            $connection = 'Yii::$app->db;
            if (is_writable($database_source_path)) {
                return false;
              }
        } catch ('yii'db'Exception $e) {
            'Yii::$app->getSession()->setFlash('error', var_dump($e));
            return false;
        }
    }

$database_source_path - is sqlite数据库文件的路径