1. 程式人生 > >php中的 $_GET 、$GLOBALS['HTTP_ROW_POST_DATA'] 、php://input 這三者的區別之處

php中的 $_GET 、$GLOBALS['HTTP_ROW_POST_DATA'] 、php://input 這三者的區別之處

明顯,這三個都是為了獲取通過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'

這種 MIME ,php給我們提供了 $_FILES 陣列來獲取這種資料的資訊。

先在CSDN支援MarkDown,很好啊!