今天在將一個本地PHP網(wǎng)站部署到服務(wù)器后,訪問某頁面時發(fā)生如下錯誤:
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 14 unable to open database file in /var/www/html/xxx/search.php:48
-
本地測試環(huán)境
- 操作系統(tǒng):Windows 10 專業(yè)版
- PHP 版本:7.1.x
-
遠(yuǎn)程服務(wù)器環(huán)境
- 操作系統(tǒng):CentOS 6
- PHP 版本:7.0.x
起先懷疑是PHP 版本不同引起的,因?yàn)閯倓偛沤鉀Q了一個7.1.x才支持的const變量作用域修飾符的問題,在7.0.x中你不能在const變量前面使用public等修飾符,比如:
public const INVALID_ACCESS_CODE = -1
是錯誤的,必須把前面的public去掉。而在7.1.x中就可以這樣寫了。
但檢查了幾遍代碼也沒發(fā)現(xiàn)哪里有問題,進(jìn)一步的觀察發(fā)現(xiàn),這個錯誤發(fā)生在對數(shù)據(jù)庫有寫操作的時候,讀沒有問題。然后在網(wǎng)上搜了一下,發(fā)現(xiàn)可能是權(quán)限的問題,于是又把遠(yuǎn)程服務(wù)器上數(shù)據(jù)庫文件的權(quán)限改成可讀寫,問題依然存在。
繼續(xù)搜索,終于在一篇文章里提到相同的問題,罪魁禍?zhǔn)滓彩俏募?quán)限,SQLite在寫數(shù)據(jù)庫的時候還會生成一個xxx.db-jounal的臨時文件,因此除了對數(shù)據(jù)庫文件擁有讀寫權(quán)限,還需要對數(shù)據(jù)庫所在的目錄擁有讀寫權(quán)限。
于是對目錄設(shè)置讀寫權(quán)限后,問題迎刃而解。