2008年11月6日星期四

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

首先看一下手册:

“PHP_SELF”
当前正在执行脚本的文件名,与 document root 相关。举例来说,在 URL 地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将会得到 /test.php/foo.bar 这个结果。__FILE__ 常量包含当前(例如包含)文件的绝对路径和文件名。 如果 PHP 以命令行方式运行,该变量在 PHP 4.3.0 之前无效。

“SCRIPT_NAME”
包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 包含当前文件的绝对路径和文件名(例如包含文件)。

用个例子比较容易理解:

http://127.0.0.1/test/scripts/phpinfo.php/abc.php?sourc=asdfa&sadf-asdf=asdf

_SERVER["SCRIPT_NAME"] /shopping/scripts/phpinfo.php
_SERVER["PHP_SELF"] /shopping/scripts/phpinfo.php/abc.php

其中(/abc.php) 它是不存在的.


另外还有一个,我没有测试过:

通常在本机测试 $_SERVER['SCRIPT_NAME'] 跟 $_SERVER['PHP_SELF'] 大概看不出有什么不同,但是放到某些虚拟主机上就不一样了.

DreamHost 上的 PHP 是以 CGI 方式执行,二者就有明显不同的差异。

echo $_SERVER['SCRIPT_NAME']; // 输出/cgi-system/php.cgi
echo $_SERVER['PHP_SELF']; // 输出 /admin/gg.php

看出有什么不同了吧? ^^


没有评论:

博客归档