2011-04-12 89 views
8

$_SERVER['PATH_INFO']$_SERVER['ORIG_PATH_INFO']有什么区别?我如何使用它们?

当我运行print_r($_SERVER),PATH_INFOORIG_PATH_INFO不存在阵列中。为什么不?我如何启用它们?

我已阅读他们的PHP手册,但仍然不明白他们。

http://www.example.com/phpinfo.php/HELLO_THERE 

这仅仅是.php脚本后/HELLO_THERE部分:

回答

14

PATH_INFO变量,如果你调用一个PHP脚本,这样才存在。如果您不像这样调用URL,则不会有$_SERVER["PATH_INFO"]环境变量。

PORIG_前缀有些不常见。 PATH_INFO是一个标准的CGI环境变量,永远不应该加前缀。你从哪里读到的? (有大约PHP3/PHP4一些问题,如果您通过调用PHP解释器的cgi-bin/- 但几乎没有人有这样的设置今天。)

参考:http://www.ietf.org/rfc/rfc3875

+0

我认为它的意思是'ORIG_PATH_INFO'。看起来有些服务器配置创建了这个,而不是'PATH_INFO'。 – Phil 2011-04-12 02:31:40

+0

然后它肯定是一个CGI处理程序设置。在某些设置中,PHP会在SCRIPT_FILENAME上使用PATH_INFO,所以服务器可能配置为使用path_info的替代名称。 – mario 2011-04-12 02:38:06

1

PATH_INFO和ORIG_PATH_INFO很少使用。这些引用文件名称后面的请求路径(第一个/打开的URL部分)和查询字符串中的任何内容。通常,您在URL中不会有PATH_INFO。

我猜你的意思是ORIG_PATH_INFO,而不是PORIG_PATH_INFO。路径信息可能由mod_rewrite和PHP脚本本身操纵。在对字符串进行任何重写或其他操作之前,ORIG_PATH_INFO是原始请求中的PATH_INFO。

+8

'PATH_INFO'在Symfony和ZF中都有使用,所以我不会称之为“很少使用” – Phil 2011-04-12 02:33:50

+0

只是为了增加这一点,因为我需要使用PATH_INFO并且被PATH_INFO误导了,显然没有被使用许多。基于WordPress内部使用:https://github.com/WordPress/WordPress/blob/4.4.4/wp-includes/class-wp.php#L155。公平地说它被使用[非常多](http://www.opensourcecms。com/general/cms-marketshare.php),所以如果你需要使用它! – 2016-08-04 15:08:57

+0

“...在文件名称和查询字符串之后。” - 请注意,PATH_INFO在查询字符串之前_before,而不是在它之后。 – MrWhite 2016-11-30 20:06:58

6

试试这个:

$path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (!empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : ''); 
+0

节省日程谢谢。 – 2014-07-16 19:00:10

相关问题