本文讨论的是在PHP5环境下,使用PHP-FPM自定义session_save_path来个性化session存储目录的一个小技巧。
环境描述:
- FreeBSD 6.4-STABLE
PHP-5.2.10-FPM-0.5.13
NGINX 0.7.67
问题触发条件:
- [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兼容方案了。
