2011-06-24 69 views
11

之间有什么区别:

$_SERVER['SCRIPT_NAME'] 

$_SERVER['PHP_SELF'] 

谢谢。

+0

请参阅:http://stackoverflow.com/questions/279966/php-self-vs-path-info-vs-script-name-vs-request-uri – amosrivera

+1

你也可能想看看神奇常数\ _ \ _ FILE__ - http://php.net/manual/en/language.constants.predefined.php – dqhendricks

回答

2

前者是脚本名称(例如/foo.php),后者是请求URI路径(例如/foo.php/123)。

+1

不完全如此。是的,PHP_SELF是从域的末尾到查询字符串的整个url路径,但是在mod_rewrite被执行之后并且在执行别名之前。 – 2015-12-18 20:49:25

9

它们应该包含相同的信息。然而,从历史和技术上讲,两者之间存在差异。

SCRIPT_NAME在CGI 1.1规范中定义,因此是一个标准。这意味着无论您使用哪种脚本语言,它都应该可用。

PHP_SELF直接由PHP实现,只要你用PHP编程,它就在那里。

+0

“PHP_SELF”这个名称对于PHP来说是唯一的,但由于它是整个URL路径,它实际上是IETF中定义的一个标准,名称不同。 – 2015-12-18 20:52:05

5

大多数时候是一样的,但$_SERVER['SCRIPT_NAME']$_SERVER['PHP_SELF']少欺骗性,所以你如果要重用某个输出上的数据应该使用SCRIPT_NAME

检查that article获得的不同结果。

+1

你应该逃避动态数据的输出,而不管它是如何欺骗的。 – knittl

+0

@ knittl:是的,没错,在没有正确转义的情况下重复使用它会是一个安全问题,但对于容易欺骗的人来说,它会更加危险。 – regilero

+1

是的,它更具欺骗性,但只是因为它是整个URL路径(在mod_rewrite之后获得)。所以,这取决于我们需要什么。如果我们只需要SCRIPT_NAME部分,那么我们就可以使用它。如果我们需要整个URL路径,我们使用PHP_SELF,当然,我们不应该相信它 - 它是URL路径。 – 2015-12-18 20:54:44