以下哪些代碼會更快?
$temp = $_REQUEST['s'];
或
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
以下哪些代碼會更快?
$temp = $_REQUEST['s'];
或
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
$_REQUEST
默認情況下包含$_GET
,$_POST
和$_COOKIE
的內容。
但這只是一個默認值,取決於variables_order
;並不確定你想使用cookie。
如果讓我選擇,我可能不會使用$_REQUEST
和$_GET
或$_POST
我會選擇 - 這取決於我的應用程序應該做的事情(即一個或另一個,但不能同時):一般說:
$_GET
。$_POST
。無論哪種方式,性能沒有太大差別:與腳本的其餘部分相比,差別不會太大。
理想情況下,你應該永遠是abl e使用$ _REQUEST。但那當然只是一個完美的世界。 – 2009-12-17 22:16:22
一個完美的世界,XSS是不可能的...... – 2009-12-17 22:30:34
$ _REQUEST被認爲(或者至少曾經是)比直接使用$ _POST和$ _GET更加昂貴。 – 2009-12-17 22:47:58
我會使用第二種方法,因爲它更明確。否則,你不知道變量來自哪裏。
爲什麼你需要同時檢查GET和POST?當然使用其中一種只會更有意義。
我以前見過這種情況,'GET'只用於一個項目(例如移動它)和'POST'以獲取其中的多個項目複選框...)。 – Franz 2009-12-17 22:12:21
別擔心。但是您仍然應該使用第二種解決方案(再加上額外檢查是否存在這些變量),因爲$_REQUEST
存在安全問題(因爲$_GET
和$_POST
不是該陣列的唯一來源)。
昨天有一篇關於$_REQUEST
的問題,我相信。讓我去找它。
編輯:哦,不直接在後,但在這裏它是無論如何:http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
我建議使用$_POST
和$_GET
明確。
無論如何,使用$ _REQUEST對於正確的網站設計來說應該是不必要的,它帶來了一些缺點,例如讓您更容易發現CSRF/XSS
攻擊和其他來自URL中數據存儲的愚蠢行爲。
速度差異應該是最小的任一方式。
您正在過早優化。另外,出於安全原因,您應該考慮是否將GET用於發佈內容。
請不要試圖告訴民衆,關於POST比任何東西都更安全關於GET。 – 2009-12-17 22:23:07
我沒有。要點是,他們的使用應該考慮一下,而不是公然交替使用,因爲「只需輸入REQUEST就可以了。 IER」。 – 2009-12-17 22:29:17
如果您的意思是kobra應該使用預期的方法檢查數據是否已發送,那麼我同意。他的任何一個代碼示例都使這種測試變得不可能。 – 2009-12-17 22:39:57
我只用過_GET或_POST。我更喜歡控制。
我不喜歡OP中的任何代碼片段,他們放棄了使用HTTP方法的信息。這些信息對於輸入消毒是重要的。
例如,如果腳本接受要輸入到數據庫中的表單的數據,那麼表單最好使用POST(use GET only for idempotent actions)。但是,如果腳本通過GET方法接收輸入數據,那麼它應該(通常)被拒絕。對我而言,這種情況可能需要在錯誤日誌中寫入安全違規行爲,因爲這是某人正在嘗試的某種信號。
在OP中的任一代碼片段中,這種消毒是不可能的。
實際上,寫一個小頁面可以簡單地寫出任何你想要的頁面。所以除非你依賴發送的引用頭信息,否則後變量比獲得變量更安全。我認爲明確的'$ _POST'的最大優點是阻止搜索引擎爬行者做這樣的事情:http://thedailywtf.com/Articles/WellIntentioned-Destruction.aspx – Duroth 2009-12-17 22:50:46
我沒有說任何相反的事情。 我說的是,如果HTML表單使用POST並且處理它的腳本通過GET接收表單的數據,那麼腳本會想知道它,而不是像Kobra的例子那樣拋棄這個事實。 (順便說一句:引用者也不安全。) – 2009-12-17 23:16:55
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
使用,因爲它是更安全,它不會使明顯的速度差異
我會用$_POST
,並$_GET
因爲不同於$_REQUEST
其內容不受variables_order
影響。
何時使用$_POST
和$_GET
取決於正在執行什麼樣的操作。更改從服務器處理的數據的操作應通過POST請求完成,而其他操作應通過GET請求完成。舉個例子,刪除用戶賬戶的操作不應該在用戶點擊鏈接後直接執行,而查看圖像可以通過鏈接完成。
$ _GET從查詢字符串,或者網址檢索變量。>
_POST $檢索從POST方法的變量,如(通常)的形式。
$ _REQUEST是$ _GET和$ _POST的合併,其中$ _POST覆蓋$ _GET。很好地使用$ _REQUEST自我更新形式進行驗證。
+1這基本上是我教過的東西。不像其他答案那樣具有技術性,但更容易記住(從查詢字符串'GET',從表單提交'POST')。 – jp2code 2014-04-04 14:58:45
酷酷且簡單的瞭解這個概念。 – 2014-09-22 09:47:41
GET與POST
1)GET和POST創建一個陣列(例如陣列(密鑰=>值,鍵2 =>值2,KEY3 =>值3,...))。該數組包含鍵/值對,其中鍵是表單控件的名稱,值是來自用戶的輸入數據。
2)GET和POST都被視爲$ _GET和$ _POST。這些都是全球性的,這意味着它們總是可以訪問的,不管範圍如何 - 您可以從任何函數,類或文件訪問它們,而無需執行任何特殊操作。
3)$ _GET是通過URL參數傳遞給當前腳本的變量數組。
4)$ _POST是一個通過HTTP POST方法傳遞給當前腳本的變量數組。
何時使用GET?
使用GET方法從表單發送的信息對每個人都可見(所有變量名稱和值都顯示在URL中)。GET也會限制發送的信息量。限制約爲2000個字符。但是,由於變量顯示在URL中,因此可以爲頁面添加書籤。這在某些情況下可能會有用。
GET可用於發送非敏感數據。
注意:GET不應該用於發送密碼或其他敏感信息!
何時使用POST?
使用POST方法從表單發送的信息對其他用戶不可見(所有名稱/值都嵌入在HTTP請求的主體中),並且對發送的信息量沒有限制。
此外,POST支持高級功能,例如在將文件上傳到服務器時支持多部分二進制輸入。
但是,由於變量未顯示在URL中,因此無法爲頁面添加書籤。
請加上一些關於REQUEST的內容。 – 2017-03-03 09:46:17
$ _GET從查詢字符串,或者網址檢索變量。>
_POST $檢索從POST方法的變量,如(通常)的形式。
$ _REQUEST是$ _GET和$ _POST的合併,其中$ _POST覆蓋$ _GET。很好地使用$ _REQUEST自我更新形式進行驗證。
重寫取決於['request_order'](http://www.php.net/manual/en/ini.core.php#ini.request-order),也可能包含cookie值,這就是爲什麼它不是非常可靠也不實用的功能。 – 2014-04-21 07:09:24
無論速度,當你使用檢索到$ _GET數據,$ _ POST或$ _REQUEST
但不管是你不能在某些情況下可以使用$_GET
替代$_POST
。
何時?
GET
也對發送的信息量有限制。限制約爲2000個字符。
其他事情的也有少數情況下,當你無法檢索使用$_POST
當一個數據?
休息服務
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
沒有什麼是錯的使用$_REQUEST
。
但是,這樣做的方法是顯式檢查$ _SERVER ['REQUEST_METHOD'],而不是依賴$ _POST爲空的GET。
我用這個,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
的聲明證實,如果$ _REQUEST有不止一個參數(在$ _REQUEST的第一個參數是可以在需要時使用請求URI, 一些PHP包不會返回$ _GET,以檢查它是否超過1爲$ _GET,默認情況下爲$ _POST。
還有第三種情況,你知道。'!isset($ _ REQUEST ['s'])' – Franz 2009-12-17 22:10:16
其他人對你的代碼的理解有多重要?POST和GET是明確的,而REQUEST可能來自不同的來源。我認爲效率很低因爲REQUEST,POST和GET超全局變量總是爲每個請求加載。 – Kevin 2009-12-17 22:31:50