thinkphp3.2版本 分頁類 page.class.php url錯誤

thinkphp在Nginx沒有pathinfo的情況出現.PHP的文件,這個讓人很是糾結。在服務器是Linux,web服務器是nginx, CGI接口是FASTCGI,就會出現這個問題。


問題原因:ThinkPHP/common/runtime.php中定義IS_CGI常量的定義有問題;錯誤代碼:




在fpm下,PHP_SAPI的值是fpm-fcgi,所以判斷IS_CGI爲0。導致在定義_PHP_FILE_常量時錯誤,進而導致 ThinkPHP/Lib/Core/Dispatcher.class.php中定義__APP__常量值錯誤。而ThinkPHP/Common /functions.php中U()方法定義用到__APP__,導致U()創建的URL錯誤;U()部分代碼:


簡單來說,當cgi.fix_pathinfo=0時,_PHP_FILE_獲取的值是.php,導致U函數生成URL不正確,改爲1後,_PHP_FILE_獲取的值是index.php。

但是cgi.fix_pathinfo=1時會有安全隱患,目前暫時先把代碼改成如下了:

解決方案:簡單粗暴

if (IS_CGI) {
//CGI/FASTCGI模式下
            //$_temp  = explode('.php',$_SERVER['PHP_SELF']);
            //define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',
            //$_temp[0].'.php'),'/'));
            define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'], '/'));
        } else {
            define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'], '/'));
        }
修改如上:文件地址thinkphp3.2版本及以上的目錄位置:thinkphp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章