php中的 $_GET 、$GLOBALS['HTTP_ROW_POST_DATA'] 、php://input 這三者的區別之處
阿新 • • 發佈:2019-02-10
明顯,這三個都是為了獲取通過http傳送到伺服器的資料。
php預設能識別的資料型別(MIME) 是application/x-www.form-urlencoded
,常見情況就是表單的提交,一般提交過來的資料都是形如 k1=v1&k2=v2&k3=v3......
這種 form-urlencoded 。這種資料php會解析到 $_POST
中,也就是我們通常在提交表單操作中使用到的那樣。但是當用戶post過來的資料是 xml格式的字串,php是不能這種資料型別解析到$_POST
陣列中的,但這會在 $GLOBALS
裡面儲存post過來的原始資料的,就是 $GLOBALS['HTTP_ROW_POST_DATA']
$_POST
中的資料也就是從這個數組裡面分析出來填充到 $_POST
的(若無法識別為 urlencoded,則為空)。 也就是說當我們想要接收 xml 格式的post資料就只能用
$GLOBALS['HTTP_ROW_POST_DATA']
了。當然還有一個 php://input
, 這個是IO stream的協議,php會解析這個協議為post過來的元素資料 也就是說 file_get_contents('php://input')
= $GLOBALS['HTTP_ROW_POST_DATA']
但是當我們post二進位制檔案到伺服器的話,這些是都不能識別的, 比如 enctype='multipart/form-data'
$_FILES
陣列來獲取這種資料的資訊。
先在CSDN支援MarkDown,很好啊!