现在位置:首页 » php/mysql »

ThinkPHP在CGI模式下的bug

作者: ⁄ 时间:2016年07月01日 ⁄ 分类: php/mysql 评论:0
服务器上用了nginx,在部署一个tp的时候呢,发现生成的url不对,比如在view里写 {:U(‘Admin/Login/captcha’)} 会变成 Admin/Login/index.php/Admin/Login/captcha
一般情况下$_SERVER[‘PHP_SELF’] 与 $_SERVER[‘SCRIPT_NAME’] 没有什么区别,但是如果PHP是以CGI模式运行的话两者就有差异
建议使用$_SERVER[‘SCRIPT_NAME’] ;
以下是有bug的代码(ThinkPHP/ThinkPHP.php第90行):
if(!IS_CLI) { // 当前文件名 if(!defined('_PHP_FILE_')) { if(IS_CGI) { //CGI/FASTCGI模式下 $_temp = explode('.php',$_SERVER['SCRIPT_NAME']);//有问题,应该将$_SERVER['PHP_SELF']改成:$_SERVER['SCRIPT_NAME']
                define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/'));
        }else {
                define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'],'/'));
        }
} if(!defined('')) { $_root = rtrim(dirname(_PHP_FILE_),'/');
        define('', (($_root=='/' || $_root=='\\')?'':$_root));

转自http://www.thinkphp.cn/code/1020.html


目前有 0 条评论