与PHP 5.3和会话文件夹的问题

我最近升级到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_probability0

原因我相信我在这里find答案http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

从本质上讲,垃圾收集设置是由某些系统上的cron作业(即Ubuntu / Debian)完成的。 一些php ini可执行文件(如php-cli)也会尝试执行垃圾回收,导致出现错误。

这似乎是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)(缺省值),则服务器上的其他用户可以通过获取该目录中的文件列表来劫持会话。

我目前使用的解决scheme(我不知道是否正确)是将会话文件夹的所有权交给Apache用户(在我的情况下是www数据)。

这个问题一直在困扰着我。 我改变了build议在php.ini的价值和问题不断发生。 我在我的index.php中find了相同的configuration值,也是private / Zend / session.php。 所以,如果问题不断出现,那么值得深入一点。 我希望这对某个人有用。