$_SERVER['PHP_SELF']
提供了错误的链接,因此某些脚本无法正常工作
例如,我将以下代码放在文件test.php
中:
<?
echo $_SERVER[PHP_SELF];
echo "<br>" ;
echo $_SERVER['PHP_SELF'];
?>
在根文件夹中,如www.site.ru/test.php
,我看到:
/test.php/test.php
/test.php/test.php
一定只是/test.php ......为什么会这样?
Php版本:
php.i686 0:5.3.16-9
php-cli.i686 0:5.3.16-9
php-common.i686 0:5.3.16-9
php-devel.i686 0:5.3.16-9
php-fpm.i686 0:5.3.16-9
php-pdo.i686 0:5.3.16-9
php-sqlite.i686 0:5.3.16-9
php-xml.i686 0:5.3.16-9
php-mysql.i686 0:5.3.16-9
php-mcrypt.i686 0:5.3.16-9
php-mbstring.i686 0:5.3.16-9
php-intl.i686 0:5.3.16-9
php-gd.i686 0:5.3.16-9
答案 0 :(得分:1)
<强> cgi.fix-PATHINFO 强>
我遇到了同样的问题,经过大量的搜索后发现我的问题的解决方案对你也很有帮助
我使用带有PHP-FPM的PHP 5.6.29的nginx / 1.10.2
var_dump($_SERVER["PHP_SELF"]); = 'string(32)"/test/index3.php/test/index3.php"'
修复,编辑php.ini cgi.fix_pathinfo确保其等于0
cgi.fix_pathinfo为CGI提供真正的 PATH_INFO / PATH_TRANSLATED支持。 PHP的 以前的行为是将PATH_TRANSLATED设置为SCRIPT_FILENAME,而不是grok PATH_INFO是什么。有关PATH_INFO的更多信息,请参阅cgi规范。设置 这将导致PHP CGI修复其路径以符合规范。一个设置 为零会导致PHP像以前一样运行。默认值为1.您应修复脚本 使用SCRIPT_FILENAME而不是PATH_TRANSLATED。 http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
应该重启nginx和php-fpm
var_dump($_SERVER["PHP_SELF"]); = 'string(16) "/test/index3.php"'