本文讨论的是在PHP5环境下,使用PHP-FPM自定义session_save_path来个性化session存储目录的一个小技巧。
环境描述:
FreeBSD 6.4-STABLE
PHP-5.2.10-FPM-0.5.13
NGINX 0.7.67
系统使用NGINX来连接PHP-FPM管理的FASTCGI进程,有关PHP-FPM的好处自不必多言,支持以不同UID启动FASTCGI进程,并且可以进行个性化配置。
问题触发条件:
[PHP]
session_handle=file
session_save_path=NULL (此时PHP会使用/tmp或者/var/tmp作为储存目录)
safe_mode on
- /tmp目录属主与PHP-FPM pool属主不一致
- 程序试图在/tmp目录下建立session储存目录
问题便会出现,显示为比较经典的"Warning: SAFE MODE Restriction in effect. bla bla bla...."
当然情况还可以更操蛋一点,来一个 @session_start 吧,你只会看到一个空白页面。
限定条件:
我需要safe_mode
我不想去一个一个改程序源代码
解决办法:
为你的PHP-FPM指定session默认储存目录吧。
example:
<section name="pool">
<value name="name">User</value>
<value name="listen_address">/tmp/php_oimg.sock</value> /*sock连接更高效*/
<value name="php_defines">
<value name="safe_mode">on</value> /*安全模式还是有必要的*/
<value name="open_basedir">/var/www/user/oimg</value> /*双保险也得要*/
<value name="session.save_path">/var/www/user/okimg/session</value> /*关键的一句*/
</value>
</section>
这样就实现了用户级session_handle兼容方案了。
评论内容
发表评论