2011-04-12 61 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

相關問題