2012-08-30 80 views
6

我想了解原始發佈數據的含義。 $HTTP_RAW_POST_DATA的PHP手冊頁只是說明此變量包含Raw POST data什麼是原始發佈數據

當這個變量將被設置,原始數據的含義是什麼?

我明白$_POST$HTTP_RAW_POST_DATA

+2

你試過看看那裏有什麼嗎? 'var_dump($ HTTP_RAW_POST_DATA);''或者甚至更好'var_dump(file_get_contents(「php:// input」));' – zerkms

+0

@zerkms:是的,它是'NULL'。我試了兩個和輸出是'NULL','string(0)「''分別 – Daric

+1

http://stackoverflow.com/questions/3173547/whats-the-difference-between-post-and-raw-post-in- php-at-all –

回答

9

HTTP請求由兩個部分組成。一組標題和一個正文。

頭文件包括像被請求的URL和緩存控制助手之類的東西(比如「我有一個來自昨天的版本,只給了我一個新的,如果有變化,好嗎?」)。

根據請求的類型,正文可能會或可能不會顯示。 POST請求包含正文。

身體可以採用客戶喜歡的任何格式。其中一個標題會告訴服務器格式是什麼。

HTML表單使用了幾種格式,PHP知道如何解析這些格式並將數據放入$_POST

如果數據是另一種格式,如JSON,或者如果數據不符合PHP的怪癖(例如具有相同名稱的密鑰末尾有[]的規則),那麼您可能希望直接訪問數據,這樣你就可以自己解析它。

這是原始的POST數據。

+0

乾淨的解釋! – Daric

1

HTTP完全糊塗是一種基於文本的協議,所以所有的數據作爲一個字符串傳遞。當您使用$_POST時 - 您已經將處理的傳遞數據處理爲數組形式。這是在控制權傳遞給腳本之前由php自動完成的。

因此,在原始發佈數據中有一個數據,因爲它是通過網絡傳遞的。

可能你看到a=1&b=2數據,你在URL中看到它

+0

謝謝@zerkms。 – Daric

1

一個東西,你可以用http協議做是做,它發送一些文字回服務器POST請求。

$HTTP_RAW_POST_DATA將包含該文本,不管它說什麼。

大多數情況下,當我們發送POST請求時,我們將在發送的文本中添加一個「內容類型」。這告訴服務器它是什麼類型的內容。大部分時間在網絡上,我們發送內容類型爲'application/x-www-form-urlencoded'。

當服務器接收與該內容類型標記物的POST請求時,服務器將知道力圖把數據轉換成$_POST陣列,使得「測試=你好」變爲:

$_POST['test']='hello' 
4

$_POST可以是說,與分裂$HTTP_RAW_POST_DATA後的結果,PHP分割原始數據後和格式在我們看到它在$_POST例如方式:

$HTTP_RAW_POST_DATA看起來像這樣

key1=value1&key2=value2 

$_POST然後看起來像這樣:

$_POST = array(
    "key1" => "value1", 
    "key2" => "value2",); 
0

$HTTP_RAW_POST_DATA包含像原始POST數據如下:

  • 文本
  • JSON
  • XML
  • HTML

一般來說,php://input應該代替$HTTP_RAW_POST_DATA.因爲從PHP 5.6.0開始,此功能已被拒絕。依靠這個功能是非常不鼓勵的。

來源:php.net - $HTTP_RAW_POST_DATA

相關問題