在PHP中怎麼接收post過來的JSON數據

要在PHP中整體接收POST數據,有兩種方法。

注意,要使用以下兩種方法,Content-Type不能爲multipart/form-data。

方法一:

使用:

1
file_get_contents('php://input')

其中,php://input是一個流,可以讀取沒有處理過的POST數據(即原始數據)。相較於$HTTP_RAW_POST_DATA而言,它給內存帶來的壓力較小,並且不需要特殊的php.ini設置。

方法二:

使用此方法,需要設置php.ini中的always_populate_raw_post_data值爲On。

使用$HTTP_RAW_POST_DATA,包含了POST的原始數據。但這不是一個超全局變量,要在函數中使用它,必須聲明爲global,或使用$GLOBALS['HTTP_RAW_POST_DATA']代替。




來源:http://blog.csdn.net/iastro/article/details/52442505



最近用到ext與PHP交互,ext把json數據post給PHP,但在PHP裏面$_post獲取不到,$_REQUEST也獲取不到,但是通過firedebug看到的請求信息確實是把JSON數據post給了PHP,這什麼情況?
突然想到了以前接觸過flash將圖片二進制流傳給php,靈機一動用$GLOBALS['HTTP_RAW_POST_DATA']獲取到了。於是就深入的查了一下,原來PHP默認只識別application/x-www.form-urlencoded標準的數據類型,因此,對型如text/xml或者 soap 或者 application/octet-stream之類的內容無法解析,如果用$_POST數組來接收就會失敗!故保留原型,交給$GLOBALS['HTTP_RAW_POST_DATA']來接收。

php的HTTP_RAW_POST_DATA
用Content-Type=text/xml類型,提交一個xml文檔內容給了php server,要怎麼獲得這個POST數據。
The RAW/ uninterpreted HTTP POST information can be accessed with:$GLOBALS['HTTP_RAW_POST_DATA'] This is useful in cases where thepost Content-Type is not something PHP understands (such astext/xml).
由於PHP默認只識別application/x-www.form-urlencoded標準的數據類型,因此,對型如text/xml的內容無法解析爲$_POST數組,故保留原型,交給$GLOBALS['HTTP_RAW_POST_DATA']來接收。
另外還有一項php://input 也可以實現此這個功能
php://input允許讀取 POST 的原始數據。和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,並且不需要任何特殊的php.ini 設置。php://input 不能用於enctype="multipart/form-data"。

應用
a.htm代碼如下:
<form action="post.php" method="post">
<input type="text" name="user">
<input type="password" name="password">
<input type="submit">
</form>

post.php代碼如下:
<?echo file_get_contents("php://input");?>


來源:http://blog.csdn.net/moqiang02/article/details/22947707

發佈了26 篇原創文章 · 獲贊 27 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章