$ _SERVER ['PHP_SELF']和$ _SERVER ['SCRIPT_NAME']有什么区别?

时间:2011-07-16 17:57:49

标签: php apache

我有一个php框架,我使用$_SERVER['SCRIPT_NAME']来优化可移植性。这样我就不需要再手动配置路径了。

$this->base_url = str_replace('index.php', '', 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']);

但我注意到$_SERVER['SCRIPT_NAME']$_SERVER['PHP_SELF']返回完全相同的字符串。那么,有什么区别?我该如何在它们之间做出选择?

2 个答案:

答案 0 :(得分:9)

差分

http://sandbox.phpcode.eu/g/3e38d.php/test

脚本名称是文件的绝对路径。

PHP_SELF是您目前所在的脚本(以及.php之后的“路径”)

就像$_SERVER['SERVER_NAME']$_SERVER['HTTP_HOST']

http://sandbox.phpcode.eu./g/f5093.php

http://sandbox.phpcode.eu/g/f5093.php

发现一个差异

答案 1 :(得分:7)

SCRIPT_NAME
  

包含当前脚本的路径。这对需要指向自己的页面很有用。 __FILE__常量包含当前(即包含)文件的完整路径和文件名。

PHP_SELF
  

当前正在执行的脚本的文件名,相对于文档根目录。例如,地址$_SERVER['PHP_SELF']的脚本中的http://example.com/test.php/foo.bar将为/test.php/foo.bar__FILE__常量包含当前(即包含)文件的完整路径和文件名。如果PHP作为命令行处理器运行,则此变量包含自PHP 4.3.0以来的脚本名称。以前它不可用。

来源php.net

有一件事:

查看http://www.yoursite.com/example/index.php/dir/test

$_SERVER['PHP_SELF'] == '/example/index.php/dir/test';

中的

$_SERVER['SCRIPT_NAME'] == '/example/index.php';

中的

ETA: 试过自己

在localhost上试过这个 http://127.0.0.1:8887/index.php/dir/test

echo $_SERVER['PHP_SELF'] . "<br />";
echo $_SERVER['SCRIPT_NAME'];

输出是:

/index.php/dir/test 
/index.php