首頁  >  文章  >  後端開發  >  php 取得 POST JSON 數據

php 取得 POST JSON 數據

巴扎黑
巴扎黑原創
2016-11-24 13:39:091669瀏覽

在透過ajax傳遞資料到php程式時,會發現使用$_POST根本無法取得資料.但是在firebug中可以看到post中其實是有json資料的.

 在使用print_r(file_get_contents("php:/ /input")) 之後,卻可以得到json數據

 

那什麼是php://input呢?

對php://input的介紹,PHP官方手冊文檔有一段話對它進行了很明確地概述。

   “php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini dialtives.” /form-data”. 

  翻譯過來,是這樣: 

   「php://input可以讀取沒有處理過的POST資料。相較於$HTTP_RAW_POST_DATA而言,它給記憶體帶來的壓力較小,且不需要 特殊的php.ini設定。 php://input不能用於enctype=multipart/form-data」。

  1,Content-Type 取值為application/x-www-form-urlencoded時,php會將http請求body對應資料填入到數組$_POST,填入到$_POST數組中的數據是進行urldecode()解析的結果。
   2,php://input數據,只要Content-Type不為multipart/form-data(該條件限制稍後會介紹)。相符的資料的長度由Content-Length指定。是」一致」(打上引號,表示它們格式不一致,內容一致)的。在http請求頭部(header)的PATH字段,而不是寫在http請求的body部分。 http_raw_post_data是PHP 內建的一個全域變數。 -data的POST資料。 -data-urlencoded和multipart/form-data兩種情況下,PHP才會將http請求封包中對應的資料填入全域變數$_POST 

  2,PHP不能辨識的Content-Type類型的時候,會將http請求包中對應的資料填入變數$HTTP_RAW_POST_DATA 

  3, 只有Coentent-Type不為multipart/form-data的時候,PHP不會將http請求封包中的對應資料填入php://input,否則其它情況都會。填入的長度,由Coentent-Length指定。 

  4,只有Content-Type為application/x-www-data-urlencoded時,php://input資料才跟$_POST資料相符。

  5,php://input資料總是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更湊效,且不需要特殊設定php.ini 

  6,PHP_P. ,填入全域變數$_GET。通常情況下,GET方法提交的http請求,body為空。



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn