今天在将一个本地PHP
网站部署到服务器后,访问某页面时发生如下错误:
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 14 unable to open database file in /var/www/html/xxx/search.php:48
-
本地测试环境
- 操作系统:Windows 10 专业版
- PHP 版本:7.1.x
-
远程服务器环境
- 操作系统:CentOS 6
- PHP 版本:7.0.x
起先怀疑是PHP
版本不同引起的,因为刚刚才解决了一个7.1.x才支持的const
变量作用域修饰符的问题,在7.0.x中你不能在const
变量前面使用public
等修饰符,比如:
public const INVALID_ACCESS_CODE = -1
是错误的,必须把前面的public
去掉。而在7.1.x中就可以这样写了。
但检查了几遍代码也没发现哪里有问题,进一步的观察发现,这个错误发生在对数据库有写操作的时候,读没有问题。然后在网上搜了一下,发现可能是权限的问题,于是又把远程服务器上数据库文件的权限改成可读写,问题依然存在。
继续搜索,终于在一篇文章里提到相同的问题,罪魁祸首也是文件权限,SQLite
在写数据库的时候还会生成一个xxx.db-jounal
的临时文件,因此除了对数据库文件拥有读写权限,还需要对数据库所在的目录拥有读写权限。
于是对目录设置读写权限后,问题迎刃而解。
网友评论