簡介:這是php 擷取 POST JSON 資料的詳細頁面,介紹了和php,php, post, json php 擷取 POST JSON 資料有關的知識、技巧、經驗,和一些php源碼等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=359497' scrolling='no'>
在通過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 directives. php://input is not available with
enctype=”multipart/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()解析的結果。(其實,除了該Content-Type,還有multipart/form-
data表示資料是表單資料,稍後我們介紹)
2,php://input資料,只要Content-Type不為multipart/form-data(該條件限制稍後會介紹)。那麼php:
//input資料與http entity body部分資料是一致的。該部分相一致的資料的長度由Content-Length指定。
3,僅當Content-Type為application/x-www-form-urlencoded且提交方法是POST方法時,$_POST數
據與php://input資料才是”一致”(打上引號,表示它們格式不一致,內容一致)的。其它情況,它們都不一致。
4,php://input讀取不到$_GET資料。是因為$_GET資料作為query_path寫在http要求標頭部(header)的PATH欄位,而不是寫在http請求的body部分。
相信大家對
php://input已經有一定深度地瞭解了。那麼$http_raw_post_data是什麼呢?$http_raw_post_data是PHP
內建的一個全域變數。它用於,PHP在無法識別的Content-Type的情況下,將POST過來的資料原樣地填入變
量$http_raw_post_data。它同樣無法讀取Content-Type為multipart/form-data的POST資料。需要設定
php.ini中的always_populate_raw_post_data值為On,PHP才會總把POST資料填入變
量$http_raw_post_data。
學習筆記1,Coentent-Type僅在取值為application/x-www-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會將PATH欄位的query_path部分,填入全域變數$_GET。通常情況下,GET方法提交的http請求,body為空白。
愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具
http://biancheng.dnbcw.info/php/359497.html pageNo:1