PHP 5.3和会话文件夹的问题


81

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


我做到了,但不是在5.3上。原来是一个权限错误,已过滤到会话保存路径。我假设您已检查权限?
Jarrod Nettles 2010年

@Jarrod我看到www-data可以读写该文件夹(该文件夹现在对每个人,用户,组和世界都有w&r),我是否应该检查其他内容?
伊泰·莫阿夫

我猜测它偶尔发生的原因是运行会话垃圾收集器时发生错误,我认为默认情况下每次会话初始化运行的可能性为1%。您是否对php.ini进行了有关会话的任何更改?这里的默认值之外是什么?检查会话文件夹的所有者,之后我迷失了方向,看不到.ini或错误。
Jarrod Nettles 2010年

所有者为root,会话由www-data创建,每个人都可以访问此文件夹。我将逐一检查ini设置,寻找可疑的东西。
Itay Moav -Malimovka's

ps_files_cleanup_dir:opendir(/ var / lib / php5)失败:权限被拒绝(
Itay Moav -Malimovka 2010年

Answers:


121

解决方法:在您php.ini设置session.gc_probability0

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

本质上,垃圾回收设置为由某些系统(例如Ubuntu / Debian)上的cron作业完成。一些php ini可执行文件(例如php-cli)也尝试进行垃圾回收,这会导致您得到错误。


6
我在Ubuntu 10.04上也遇到了这个问题,但是在检查php.ini时,我session.gc_probability已经设置为0
乔纳森

5
@Jonathan-您可能会发现您的应用程序正在设置该值。
SynackSA 2013年

3
@SynackSA奇怪的是,当我创建一个自定义的,网站的具体php.ini文件,这是当它的session.gc_probability,即使有在php.ini文件中没有设置触发器为1。这件事发生任何!我在Ubuntu 2.2上的Ubuntu上运行suphp。我想知道那是否是某种错误。无论如何,添加session.gc_probability = 0到我的自定义,特定于站点的php.ini文件似乎可以解决此问题。
乔纳森

2
@Jonathan这就是它的工作方式,因为默认值为1
ROunofF 2015年

2
这将禁用会话垃圾收集。您可能应该检查一下是否确实有cron清理了您的会话。
hansgoed '16

23

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


2

我目前使用的解决方案(我不确定这是正确的解决方案)是将会话文件夹的所有权授予Apache用户(在我的情况下为www-data)。


2
如Marie上文所述,这可能会为任何生产服务器造成安全问题。
卡扎伊2012年

2
我早就实施了正确的解决方案:-)但是,安全问题主要存在于共享服务器上
Itay Moav -Malimovka 2012年

1
@pike会话清理由php cli通过CRON处理
Itay Moav -Malimovka

1

这个问题困扰了我一段时间。我按照php.ini中的建议更改了值,此问题不断发生。我在index.php和private / Zend / session.php中发现了相同的配置值。因此,如果问题持续发生,则值得深入研究。我希望这对某人有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.