2016-09-17 69 views
0

我正在開發一個Yii2應用程序,並且有時,我用於數據庫的Sqlite3文件變成「只讀」(由於服務器上發生其他事情),並且用戶正在獲取令人討厭的PHP異常錯誤而不是很好的顯示錯誤信息。 我想使用「beforeSave()」函數來檢查數據庫是否可寫,但我不知道檢查web進程(www-data)是否有寫入權限的最佳方法。 任何任何想法? 我有以下兩個功能在我的基本模型:如何檢查我的Yii2應用程序中的web進程是否可以寫入sqlite數據庫文件?

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; 
     } 
    } 
+0

定義只讀?磁盤IO層,還是SQLite3併發層? – SOFe

+0

它與擁有者不同於「www-data」一樣簡單。要麼sqlite文件本身或父目錄 –

+0

http://php.net/is-writable? – SOFe

回答

1
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 - 是SQLite數據庫文件

的路徑
+0

哇,那很簡單! :)我不知道有這樣的PHP函數。 –

相關問題