LNMP一键安装包装上过后,发现thinkphp的pathinfo模式无法使用。
百度一番,发现nginx/conf/vhost/域名 文件里有开启pathinfo的说明,于是启动了pathinfo。
但是项目仍然无法运行,于是我在本地和服务器同时运行了一下代码:
<code><span><span><?php </span> var_dump(<span>$_SERVER</span>);</span></span></code>
发现PHP_SELF这一项有区别,so问题可能就在这里。
接下来在项目里搜索PHP_SELF,找到了这个文件:
ThinkPHP.php
<code><span>if</span>(<span>IS_CGI</span>) { <span>//</span><span>CGI</span>/<span>FASTCGI</span>模式下 <span>$_temp</span> = explode(<span>'.php'</span>,<span>$_SERVER</span>[<span>'PHP_SELF'</span>]); define(<span>'_PHP_FILE_'</span>, rtrim(str_replace(<span>$_SERVER</span>[<span>'HTTP_HOST'</span>],<span>''</span>,<span>$_temp</span>[<span>0</span>].<span>'.php'</span>),<span>'/'</span>)); }<span>else</span> { define(<span>'_PHP_FILE_'</span>, rtrim(<span>$_SERVER</span>[<span>'SCRIPT_NAME'</span>],<span>'/'</span>)); }</code>
也就是ThinkPHP在cgi模式下依赖了PHP_SELF,问题果然在这里
最后又百度了一番,原来是php.ini里为了屏蔽一个漏洞设置了:
<code><span>cgi.fix_pathinfo</span>=<span>0</span></code>
正是因为这一行设置,导致了PHP_SELF的值出现了偏差。
然而LNMP集成包里的pathinfo.conf已经使用
<code>try_files <span>$fastcgi_script_name</span> =<span>404</span></code>
解决了这个漏洞,所以我们可以修改php.ini为
<code><span>cgi.fix_pathinfo</span>=<span>1</span></code>
重启服务器,OK,问题解决
以上就介绍了Nginx服务器下使用ThinkPHP的pathinfo模式的问题,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。