1

$_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 
4

1 回答 1

1

cgi.fix-pathinfo

我也有同样的问题,经过大量搜索找到解决我的问题的方法,你也确定了

我使用 nginx/1.10.2 和 PHP 5.6.29 和 PHP-FPM

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,并且不了解 PATH_INFO 是什么。有关 PATH_INFO 的更多信息,请参阅 cgi 规范。将此设置为 1 将导致 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"'

于 2017-01-13T09:43:45.317 回答