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. session_handle=file
  2. session_save_path=NULL (此时PHP会使用/tmp或者/var/tmp作为储存目录)
  3. 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兼容方案了。

回复评论

Comment

  • 输入内容会自动换行、分段。

Plain text

  • 不允许HTML标记。
  • 网址或者email地址在发表后系统会帮你自动转化为可点击的连接。
  • 输入内容会自动换行、分段。