我正在开发一个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数据库文件的路径