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