2
A
回答
0
請注意有一個與getenv
(或$_ENV
爲these 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_NAME
。 getenv()
將要使用的大多是在RFC 3875
上市所以預先定義按鍵的列表,如果你想使用getenv()
- 你應該使用SCRIPT_NAME
來指代當前腳本的名稱。注意,在一些箱子這個環境中的關鍵可以設置(所以你可以做getenv('PHP_SELF')
) - 但你不應該依賴於這種在常見的情況。
1
確定。實際上,問題是getenv()不接受「PHP_SELF」作爲參數。 或者,您可以使用 -
$ip=getenv('REQUEST_URI');
print_r($ip);
這會給你想要的結果。我希望它有幫助。
相關問題
- 1. in_array($ _ SERVER [「PHP_SELF」],[「/index.php」,「/tob.php」])繼續返回false
- 2. getenv()Linux/Ubuntu返回NULL
- 3. GETENV(「HTTP_XXX)返回任何
- 4. 使用PHP_SELF返回單個響應
- 5. dirname($ _ SERVER [「PHP_SELF」])如何正確返回欄?
- 6. File.delete()返回false
- 7. openssl_x509_parse返回false
- 8. SQL返回false
- 9. decimal.TryParse返回false
- 10. Golang:reflect.DeepEqual返回false
- 11. get_browser()返回FALSE
- 12. is_writable()返回false
- 13. ResultSet.next()返回false
- 14. move_uploaded_file()返回false
- 15. PHP:sqlsrv_fetch_array()返回false
- 16. Request.IsAjaxRequest返回false
- 17. System.IO.File.Exists()返回false
- 18. setlocale()返回false
- 19. file_exists()返回FALSE
- 20. File.canRead()返回false
- 21. SCDynamicStoreSetValue返回false
- 22. cursor.moveToFirst()返回false
- 23. ForceDirectories返回False
- 24. openssl_dh_compute_key返回false
- 25. R.id返回false
- 26. winusb_initialize返回false
- 27. query.next()返回false
- 28. GetVolumeNameForVolumeMountPoint返回false
- 29. setProperty()返回false
- 30. json_encode()返回false
您正在使用哪種環境? – sunny
這應該工作,請告訴你如何測試這個。 –
@sunny Linux和Mac環境,都返回'false'。 –