我有一个基于 Perl 的小型 CGI 应用程序,我在为 SourceForge 项目提供的项目 Web 空间中运行它。此应用程序将数据存储在 SQLite (v. 3) 数据库文件中。
当我从 shell 运行测试脚本时,我可以读取和写入这个 SQLite 文件。但是,当 CGI 代码由 Apache 执行时,它具有只读访问权限。写操作导致日志文件错误:
error.log.web-2:[Wed Oct 27 14:40:22 2010] [error] [client 127.0.0.1] DBD::SQLite::db do failed: unable to open database file
出于测试目的,我将该 SQLite 文件的权限一直提高到 777。没有区别。
然而,SourceForge 的项目网络空间有一些有趣的警告,我想知道我是否被绊倒了。通常,主 Web 服务器文件系统对 Apache 是只读的。如果您有需要在运行时可写的文件,您应该将它们存储在其他地方的特殊“持久”目录中......并从您的网络空间创建符号链接到该目录下的实际文件。
我已经这样做了,并且“持久性”位置下的符号链接和实际 SQLite 文件的权限都设置为 777 。我知道这种机制通常是有效的,因为我对缓存和日志文件做同样的事情,它在那里工作。
我想知道 SQLite 本身是否有什么奇怪的地方,就像它不想打开符号链接(而不是原始文件)进行编写一样。