Heim  >  Artikel  >  Backend-Entwicklung  >  Nginx服务器下使用ThinkPHP的pathinfo模式的问题

Nginx服务器下使用ThinkPHP的pathinfo模式的问题

WBOY
WBOYOriginal
2016-08-08 09:25:121127Durchsuche

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教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn