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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,719评论 0 3
  • 背景: 阅读新闻 12C CDB模式下RMAN备份与恢复 [日期:2016-11-29] 来源:Linux社区 作...
    阳屯okyepd阅读 3,567评论 0 7
  • 语 句 功 能 数据操作 SELECT——从数据库表中检索数据行和列INSERT——向数据库表添加新数据行DELE...
    戰敭阅读 5,116评论 0 53
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 10,404评论 2 22
  • 流居 居住岛上烟雨细,楼虽有门常不闭。朝看白云争起落,晚送夕阳沉海里。闲遐吟诗两三首,不用斗智出奇计。须曳灯阑我欲...
    倚剑白云天阅读 251评论 0 0