2014-03-25 40 views
2

爲什麼會getenv("PHP_SELF")回報falseGETENV( 「PHP_SELF」)返回false

由於$_SERVER['PHP_SELF']正在工作並返回

+1

您正在使用哪種環境? – sunny

+1

這應該工作,請告訴你如何測試這個。 –

+0

@sunny Linux和Mac環境,都返回'false'。 –

回答

0

請注意有一個與getenv(或$_ENVthese are identical)和$_SERVER訪問的值之間a slight difference

  • $_ENV可以直接訪問當前進程的環境變量,這是來自OS的東西。

  • $_SERVER允許訪問額外的執行信息from the webserver

如何填充這些數組取決於您的PHP執行方式。主要有不同的方式apache-module和cgi。在這兩種情況下,超全局變量的填充可能會大不相同。

建立在$_SERVER上的腳本是一種很好的做法,這些腳本是在web服務器的上下文中運行的,因爲這通常包含更多關於PHP的信息,而這些信息實際上是需要的。如果您開發的PHP應用程序應該在命令行上運行,那麼您更可能希望使用$ _ENV來更好地控制環境。

3

這是因爲getenv()不等於$_SERVER去參考。那就是:不是所有$_SERVER鍵可用於getenv()不是所有鍵具有相同的名稱。

第一個重要的區別是,getenv()將在不區分大小寫的方式進行搜索。例如,這兩個調用將返回相同的數據:

$script = getenv('SCRIPT_NAMe'); 
$script = getenv('SCRIPT_NAME'); 

二,關於PHP_SELF:這是將由環境設置的密鑰。因爲這個密鑰在環境中有另一個名字(或者說是精確的),所以它是SCRIPT_NAMEgetenv()將要使用的大多是在RFC 3875

上市所以預先定義按鍵的列表,如果你想使用getenv() - 你應該使用SCRIPT_NAME來指代當前腳本的名稱。注意,在一些箱子這個環境中的關鍵可以設置(所以你可以做getenv('PHP_SELF')) - 但你不應該依賴於這種在常見的情況。

1

確定。實際上,問題是getenv()不接受「PHP_SELF」作爲參數。 或者,您可以使用 -

$ip=getenv('REQUEST_URI'); 

print_r($ip); 

這會給你想要的結果。我希望它有幫助。