我最近升级到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在哪个用户下运行?
修复:在你的php.ini
设置session.gc_probability
中0
原因 我相信我找到了答案在这里http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage
本质上,垃圾收集设置为由某些系统上的cron作业完成(即Ubuntu/Debian).像php-cli这样的php ini可执行文件也尝试进行垃圾收集,这会导致你得到的错误.
这似乎是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手册所说:
如果将此集保留在世界可读的目录中,例如/ tmp(默认值),则服务器上的其他用户可以通过获取该目录中的文件列表来劫持会话.