![](/img/trans.png)
[英]php 5.3 --> 5.6 memcacheD extension sessions compatibility issues
[英]Issues with PHP 5.3 and sessions folder
我最近升级到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
本质上,垃圾收集设置为由某些系统(例如Ubuntu / Debian)上的cron作业完成。 一些php ini可执行文件(例如php-cli)也尝试进行垃圾回收,这会导致您得到错误。
这似乎是Ubuntu服务器上的典型错误(我使用的是Lucid LTS)。 / var / lib / php5目录的默认权限为
drwx-wx-wt 2 root root 4096 2011-11-04 02:09 php5
因此它可以被Web服务器写入但不能被Web服务器读取,我想这可以解释错误。
由于Ubuntu通过cron( /etc/cron.d/php5
)拥有自己的垃圾清理功能,因此最好按照Diwant Vaidya的建议禁用php的垃圾回收功能。
session.gc_probability = 0
实际上,有一个原因使得session文件夹不能被世界范围读取-正如PHP手册所述 :
如果将此设置保留在世界可读的目录中,例如/ tmp(默认设置),则服务器上的其他用户可能能够通过获取该目录中的文件列表来劫持会话。
我目前使用的解决方案(我不确定这是正确的解决方案)是将会话文件夹的所有权授予Apache用户(在我的情况下为www-data)。
这个问题困扰了我一段时间。 我按照php.ini中的建议更改了值,此问题不断发生。 我在index.php和private / Zend / session.php中发现了相同的配置值。 因此,如果问题持续发生,则值得深入研究。 我希望这对某人有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.