今天在將一個(gè)本地PHP
網(wǎng)站部署到服務(wù)器后减响,訪問(wèn)某頁(yè)面時(shí)發(fā)生如下錯(cuò)誤:
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 14 unable to open database file in /var/www/html/xxx/search.php:48
-
本地測(cè)試環(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了一個(gè)7.1.x才支持的const
變量作用域修飾符的問(wèn)題郭怪,在7.0.x中你不能在const
變量前面使用public
等修飾符支示,比如:
public const INVALID_ACCESS_CODE = -1
是錯(cuò)誤的,必須把前面的public
去掉鄙才。而在7.1.x中就可以這樣寫了颂鸿。
但檢查了幾遍代碼也沒(méi)發(fā)現(xiàn)哪里有問(wèn)題,進(jìn)一步的觀察發(fā)現(xiàn)攒庵,這個(gè)錯(cuò)誤發(fā)生在對(duì)數(shù)據(jù)庫(kù)有寫操作的時(shí)候嘴纺,讀沒(méi)有問(wèn)題。然后在網(wǎng)上搜了一下浓冒,發(fā)現(xiàn)可能是權(quán)限的問(wèn)題栽渴,于是又把遠(yuǎn)程服務(wù)器上數(shù)據(jù)庫(kù)文件的權(quán)限改成可讀寫,問(wèn)題依然存在稳懒。
繼續(xù)搜索闲擦,終于在一篇文章里提到相同的問(wèn)題,罪魁禍?zhǔn)滓彩俏募?quán)限场梆,SQLite
在寫數(shù)據(jù)庫(kù)的時(shí)候還會(huì)生成一個(gè)xxx.db-jounal
的臨時(shí)文件墅冷,因此除了對(duì)數(shù)據(jù)庫(kù)文件擁有讀寫權(quán)限,還需要對(duì)數(shù)據(jù)庫(kù)所在的目錄擁有讀寫權(quán)限或油。
于是對(duì)目錄設(shè)置讀寫權(quán)限后寞忿,問(wèn)題迎刃而解。