session储存与safe_mode冲突的解决方案

本文讨论的是在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进程,并且可以进行个性化配置。
问题触发条件:
  1. [PHP]
  2. session_handle=file
  3. session_save_path=NULL (此时PHP会使用/tmp或者/var/tmp作为储存目录)
  4. 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:
  1. <section name="pool">
  2.   <value name="name">User</value>
  3.   <value name="listen_address">/tmp/php_oimg.sock</value> /*sock连接更高效*/
  4.     <value name="php_defines">
  5.     <value name="safe_mode">on</value> /*安全模式还是有必要的*/
  6.       <value name="open_basedir">/var/www/user/oimg</value> /*双保险也得要*/
  7.       <value name="session.save_path">/var/www/user/okimg/session</value> /*关键的一句*/
  8.     </value>
  9. </section>

这样就实现了用户级session_handle兼容方案了。

上一篇: 低碳生活
下一篇: 妹子你为啥要出家?

点击获得Trackback地址

访客评论

  1. #1 LeoCraFT 2010-06-22, 12:45 AM
    小白~写给你的~
  2. #2 fyfei 2010-06-22, 1:06 AM
    终于又见技术贴。顶!
  3. #3 ofly 2010-06-22, 8:09 AM
    有leo就不用管这么多的技术问题了,哈哈哈

发表评论

内 容: