如果在ubuntu/Debian下, 采用apt安装的PHP, 那么在使用Session的时候, 就可能会有小概率遇到这个提示. 复制代码 代码如下: PHP Notice: session_start(): ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13) in /home/laruence/www/htdocs/index.php on line 22 这是因为, 在PHP中, 如果使用file_handler作为Session的save handler, 那么就有概率在每次sessio **深入理解PHP原理之Session Gc的一个小概率Notice** 在使用PHP进行Web开发时,有时会在Ubuntu或Debian系统上遇到一个与Session相关的错误提示,具体表现为:`PHP Notice: session_start(): ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13) in /home/laruence/www/htdocs/index.php on line 22`。这个错误的出现,主要是由于PHP在启动Session时,尝试执行Session的垃圾回收(Garbage Collection,简称GC)过程,而在这个过程中遇到了权限问题。 PHP默认使用`file_handler`作为Session的保存处理器。当每次调用`session_start()`时,PHP有可能执行GC,以清理过期的Session文件。这个行为是由配置项`session.gc_probability`和`session.gc_divisor`共同控制的。`session.gc_probability`表示GC发生的概率,`session.gc_divisor`则用于确定这个概率相对于所有Session操作的比例。例如,如果默认值分别为1和100,那么大约每100次Session操作会有1次触发GC。 在PHP源码中,GC的执行判断如下: ```php // 省略部分 int nrdels = -1; nrand = (int) ((float) PS(gc_divisor) * php_combined_lcg(TSRMLS_C)); if (nrand < PS(gc_probability)) { PS(mod)->s_gc(&PS(mod_data), PS(gc_maxlifetime), &nrdels TSRMLS_CC); } // 省略部分 ``` `php_combined_lcg()`函数生成一个0到1之间的随机数,然后判断这个随机数是否小于`session.gc_probability`除以`session.gc_divisor`的结果。如果满足条件,就会执行`s_gc()`,其中包括清理Session文件夹的步骤。 在Ubuntu/Debian系统中,Session文件存储在`/var/lib/php5`目录下,该目录的权限为`drwx-wx-wt root root`,其中设置了粘滞位。这样的权限设置意味着,只有文件的所有者(即root用户)和目录的成员才能删除文件,但其他用户可以写入文件。因此,当非root用户运行PHP时,虽然能够读写Session文件,但在执行`opendir()`试图打开目录进行清理时,会因为权限不足而报错。 解决这个问题的方法有两种: 1. 修改`/var/lib/php5`目录的权限,给予PHP worker进程适当的访问权限。 2. 关闭GC的自动运行,将`session.gc_probability`设置为0,避免在`session_start()`时触发GC。 此外,Ubuntu/Debian系统使用cron作业来定期执行Session文件的清理,这在`/etc/cron.d/php5`中定义。这个定时任务会查找并删除超过指定生命周期的Session文件。 了解这些细节有助于我们更好地管理和调试PHP应用中的Session问题,特别是在面临权限或性能优化挑战时。正确配置Session GC策略,不仅可以避免不必要的错误提示,还可以确保系统的稳定性和效率。






























- 粉丝: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于多模态毫米波雷达的疲劳驾驶检测系统.zip
- 基于毫米波OFDM信号的4D ISAC成像仿真,采用Matlab编写的MUSIC算法.zip
- 基于深度学习的毫米波系统信道估计和混合预编码.zip
- 基于空间重叠指数的毫米波多用户MIMO系统联合波束选择”.zip
- 基于深度学习解码的毫米波信道估计源编码.zip
- 基于随机空间采样的混合波束成形毫米波系统的宽带MIMO信道估计.zip
- 宽带毫米波 MIMO 系统中的传感辅助信道估计.zip
- 随机阻塞下毫米波通信的多波束功率分配”.zip
- 通过矩阵补全对毫米波系统进行大规模MIMO信道估计.zip
- 移动阻断器对毫米波蜂窝系统的影响.zip
- 【数据结构与算法】霍夫曼树原理与Python代码实战:数据压缩与通信编码中的高效应用
- 【html手游源码】变态方块小游戏.zip
- 【html手游源码】BrowserQuest源代码.zip
- 【html手游源码】冰桶大战.zip
- 【html手游源码】步步惊心小游戏源码.zip
- 【html手游源码】捕鱼游戏源码.zip



评论0