CGI 模式下,_PHP_FILE_常量定义不正确

浏览:1465 发布日期:2013/12/17
3.0.0 - 严重 - 未处理
一 问题描述
首先服务器是linux,web服务器是nginx/1.3.7, CGI接口是FASTCGI。
我上传了一个测试文件test.php,内容如下:
<?php
var_dump('SAPI===>'.PHP_SAPI);
var_dump('PHP_SELF====>'.$_SERVER['PHP_SELF']);
var_dump('SCRIPT_NAME==>'.$_SERVER['SCRIPT_NAME']);


运行结果:    string(16) "SAPI===>cgi-fcgi" 
    string(14) "PHP_SELF====>/" 
    string(23) "SCRIPT_NAME==>/test.php" 


可以看到PHP_SELF的值仅是/。

我们再来看看 /thinkphp/Common/runtime.php 文件的第40行左右:        if(IS_CGI) {
            //CGI/FASTCGI模式下
            $_temp  = explode('.php',$_SERVER['PHP_SELF']);
            define('_PHP_FILE_',  rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/'));
        }else {
            define('_PHP_FILE_',    rtrim($_SERVER['SCRIPT_NAME'],'/'));
        }
上面代码中的 "$_temp = explode('.php',$_SERVER['PHP_SELF']);" 是有问题的,这导致了$_temp[0] 的值为空。就出现了如下的URL:
http://www.xx.com/.php/?a=login&m=public

二 影响版本
3.0.0 以上版本都影响。

三 最后说明
我不知道只是我的服务上出现这个问题,还是你们服务也都出现过此问题。
评论(
后面还有条评论,点击查看>>