|
最近用到騰訊微博與PHP交互,騰訊把json數(shù)據(jù)post給PHP(騰訊推送數(shù)據(jù)時,每條數(shù)據(jù)是一個json格式的數(shù)據(jù)包,作為post的數(shù)據(jù)體(請注意post數(shù)據(jù)體沒有參數(shù),不是key=value形式,整個json包就是post的數(shù)據(jù)體)),但在PHP里面$_post獲取不到,$_REQUEST也獲取不到,但是通過firedebug看到的請求信息確實是把JSON數(shù)據(jù)post給了PHP,這什么情況 于
是就深入的查了一下,原來PHP默認只識別application/x-www.form-urlencoded標準的數(shù)據(jù)類型,因此,對型如text
/xml 或者 soap 或者 application/octet-stream
之類的內容無法解析,如果用$_POST數(shù)組來接收就會失?。」时A粼?,交給$GLOBALS['HTTP_RAW_POST_DATA'] 來接收。突然想到了以前接觸過flash將圖片二進制流傳給php,靈機一動用$GLOBALS['HTTP_RAW_POST_DATA']獲取到了。 php的HTTP_RAW_POST_DATA 用Content-Type=text/xml 類型,提交一個xml文檔內容給了php server,要怎么獲得這個POST數(shù)據(jù)。 The RAW / uninterpreted HTTP POST information can be accessed with: $GLOBALS['HTTP_RAW_POST_DATA'] This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml). 由于PHP默認只識別application/x-www.form-urlencoded標準的數(shù)據(jù)類型,因此,對型如text/xml的內容無法解析為$_POST數(shù)組,故保留原型,交給$GLOBALS['HTTP_RAW_POST_DATA'] 來接收。 另外還有一項 php://input 也可以實現(xiàn)此這個功能 php://input 允許讀取 POST 的原始數(shù)據(jù)。和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,并且不需要任何特殊的 php.ini 設置。php://input 不能用于 enctype="multipart/form-data"。 應用 代碼如下: <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");?> |
|
|
來自: corefashion > 《PHP》