我使用 sqlite3 作为 PHP 应用程序。我使用的函数来自 PHP 内置的 Sqlite3 包。
我不进行正常的 CRUD 操作,包括重新启动 DB 进行测试。这包括删除表和重新插入虚拟数据。
DB 文件的文件权限为sudo chmod a+rw
和sudo chown $USER:www-data
。
这一切都很好。
但每天至少一次,我会收到无写入错误。当我查看数据库时,权限和所有权发生了变化。
用户和组更改为$USER:$USER
,文件权限更改为-rw-r--r--
什么可能导致这种行为?
操作系统:Debian 12
答案1
当 sqlite3 操作数据库时,它会创建一个副本,更新副本,然后删除原始副本并将副本重命名为原始副本。
发生这种情况时,权限将重置为默认值。您可以通过以下方式更改默认值:
- 要设置默认组,请更改父目录的组并使该组粘贴
sudo chmod g+s .
(.
如果您不存在,则替换为父目录的名称)。这将导致在该目录中创建的所有文件继承该目录的组。 - 要设置默认组写入权限,请更改 umask。您可能需要 umask 000 或 umask 002(当前可能是 022)。这可能需要在 php 进程开始时(或启动之前)完成。