我有一个php框架,我使用$_SERVER['SCRIPT_NAME']
来优化可移植性。这样我就不需要再手动配置路径了。
$this->base_url = str_replace('index.php', '', 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']);
但我注意到$_SERVER['SCRIPT_NAME']
和$_SERVER['PHP_SELF']
返回完全相同的字符串。那么,有什么区别?我该如何在它们之间做出选择?
答案 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