起因是本地項目傳到服務(wù)器上后$HTTP_RAW_POST_DATA傳的值就為空了十减,不太清楚具體原因,不過大概是因為服務(wù)器配置文件沒有設(shè)置的原因撰茎,于是選用了泛用性更強的php://input嵌牺。之所以沒用$_POST是因為傳值用的是raw,post取不到。下面為知識點引文逆粹。
$POST 募疮、$HTTP_RAW_POST_DATA、php://input三者之間的區(qū)別
引文地址http://www.th7.cn/Program/php/201408/265980.shtml
總是產(chǎn)生變量包含有原始的 POST 數(shù)據(jù)僻弹。否則阿浓,此變量僅在碰到未識別 MIME 類型的數(shù)據(jù)時產(chǎn)生。不過奢方,訪問原始 POST 數(shù)據(jù)的更好方法是 php://input搔扁。$HTTP_RAW_POST_DATA 對于 enctype="multipart/form-data" 表單數(shù)據(jù)不可用。
問題: ? ?$HTTP_RAW_POST_DATA ?== $_POST ?嗎蟋字? ?--->答案是為否稿蹲。
個人理解總結(jié)是這么玩的:
1:$POST我們常用的就不用介紹了吧
2:$GLOBALS['HTTP_RAW_POST_DATA']:
基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一樣的。但是如果post過來的數(shù)據(jù)不是PHP能夠識別的鹊奖,你可以用$GLOBALS['HTTP_RAW_POST_DATA']來接收苛聘,比如 text/xml 或者 soap 等等。
PHP默認(rèn)識別的數(shù)據(jù)類型是application/x-www.form-urlencoded標(biāo)準(zhǔn)的數(shù)據(jù)類型,用Content-Type=text/xml 類型忠聚,提交一個xml文檔內(nèi)容給了php server,要怎么獲得這個POST數(shù)據(jù)设哗。
由于PHP默認(rèn)只識別application/x-www.form-urlencoded標(biāo)準(zhǔn)的數(shù)據(jù)類型,因此两蟀,對型如text/xml的內(nèi)容無法解析為$_POST數(shù)組网梢,故保留原型,交給$GLOBALS['HTTP_RAW_POST_DATA'] 來接收赂毯。
3:php://input 也可以實現(xiàn)此這個功能:
php://input 允許讀取 POST 的原始數(shù)據(jù)战虏。和 $HTTP_RAW_POST_DATA 比起來,它給內(nèi)存帶來的壓力較小党涕,并且不需要任何特殊的 php.ini 設(shè)置烦感。php://input 不能用于 enctype="multipart/form-data"。
print_r($_POST);
$data = file_get_contents('php://input'); ? //都要解下碼
print_r(urldecode($data));
print_r(urldecode($GLOBALS['HTTP_RAW_POST_DATA']));