PHP 5.3和会话文件夹的问题

时间:2010-05-25 13:06:35

标签: php session

我最近升级到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在哪个用户下运行?

4 个答案:

答案 0 :(得分:120)

修复:php.inisession.gc_probability0

原因 我相信我在这里找到了答案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中找到了相同的配置值。如果问题不断发生,那么值得深入研究一下。我希望这对某人有用。