我最近升级到PHP 5.3,从那时起我得到(零星的)错误消息,表明Apache(或者可能是会话文件更清晰)没有权限存储会话的文件夹。
这是随机发生的,无法通过精确的步骤进行复制,这使我猜测它是会话更清洁
任何人都有这种错误的经验吗?
错误消息(在session_start()
行上触发)是:
ps_files_cleanup_dir: opendir(/ var / lib / php5)失败: 许可被拒绝。
会话目录中的ls -ltr给出:
drwx-wx-wt 2 root root 4096 2010-05-25 12:39 php5
在这个目录中,我确实看到了www-data拥有的会话文件,这是我的Apache,应用程序运行正常。 这让我想知道会话GC在哪个用户下运行?
答案 0 :(得分:120)
修复:在php.ini
集session.gc_probability
至0
原因 我相信我在这里找到了答案http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage
基本上,垃圾收集设置为由某些系统(即Ubuntu / Debian)上的cron作业完成。像php-cli这样的php ini可执行文件也尝试进行垃圾收集,这会导致你得到的错误。
答案 1 :(得分:22)
这似乎是Ubuntu服务器上的典型错误(我正在使用Lucid LTS)。 / var / lib / php5目录的默认权限有
drwx-wx-wt 2 root root 4096 2011-11-04 02:09 php5
因此可以写入但不能被Web服务器读取,我想这可以解释错误。
由于Ubuntu通过cron(/etc/cron.d/php5
)自己进行垃圾清理,因此最好根据Diwant Vaidya的建议禁用php的垃圾收集。
session.gc_probability = 0
实际上,会话文件夹不应该是世界可读的 - PHP Manual说:
如果将此集保留在世界可读的目录中,例如/ tmp( 默认情况下,服务器上的其他用户可能能够劫持会话 获取该目录中的文件列表。
答案 2 :(得分:1)
我目前使用的解决方案(我不确定是否正确)是将会话文件夹的所有权授予Apache用户(在我的情况下为www-data)。
答案 3 :(得分:0)
这个问题一直困扰着我。我按照php.ini中的建议改变了值,问题一直在发生。我在index.php和private / Zend / session.php中找到了相同的配置值。如果问题不断发生,那么值得深入研究一下。我希望这对某人有用。