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 以上版本都影响。
三 最后说明
我不知道只是我的服务上出现这个问题,还是你们服务也都出现过此问题。