首頁  >  文章  >  後端開發  >  Nginx伺服器下使用ThinkPHP的pathinfo模式的問題

Nginx伺服器下使用ThinkPHP的pathinfo模式的問題

WBOY
WBOY原創
2016-08-08 09:25:121127瀏覽

LNMP一鍵安裝包裝上過後,發現thinkphp的pathinfo模式無法使用。
百度一番,發現nginx/conf/vhost/網域 檔案裡有開啟pathinfo的說明,於是啟動了pathinfo。
但專案還是無法運行,於是我在本地和伺服器同時運行了一下程式碼:

<code><span><span><?php</span>
var_dump(<span>$_SERVER</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教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn