Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 14 unable to open database file

今天在将一个本地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的临时文件,因此除了对数据库文件拥有读写权限,还需要对数据库所在的目录拥有读写权限。

于是对目录设置读写权限后,问题迎刃而解。

  • 参考
    1. PHP PDO sqlite ,Unable to Open database file的解决方法
    2. Django-想说爱你真不容易--解决“Unable to open database file”(原创)

你可能感兴趣的:(Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 14 unable to open database file)