神魂顛倒論壇-Flash http://bbs.flash2u.com.tw

神魂顛倒論壇 是專注於視覺/WEB應用開發的論壇
共1 則內容, 每頁顯示 10 則, 頁碼: [1]
[瀏覽完整版]

標題:[PHP]$_POST,$HTTP_RAW_POST_DATA 和 php://input 的區別

1樓
Eric138 發表於:2015-9-30 14:04:00
[PHP]$_POST,$HTTP_RAW_POST_DATA 和 php://input 的區別

類型:
PHP

HTML 首先來了解什麼是

[td]屬性值[/td]

[td]描述[/td]

application/x-www-form-urlencoded

默認樣式,在傳送到伺服器之前,所有字元都會進行編碼(空白字元轉換為 「+」 加號,特殊符號轉換為 ASCII HEX 值)

multipart/form-data

不對字元編碼,在使用包含檔案上傳控制項的表單時,必須使用該值。

text/plain

空白字元轉換為 「+」 加號,但不對特殊字元編碼。

當在網頁提交了一個表單之後,可以使用三種 PHP 方式來取得 Post 資料:$_POST,$HTTP_RAW_POST_DATA,and php://input,有什麼區別呢?

$_POST

$_POST 是取得表單 POST 過來資料(body部分)的最常用方法,上傳的檔案訊息使用 $_FILES 取得。

$HTTP_RAW_POST_DATA

當瀏覽器從表單傳送 POST 請求的時候,默認的 media type 是 「application/x-www-form-urlencoded」,意思就是欄位元名和值都編碼了,每個 key-value 對使用 ‘&’ 字元分隔開,key 和 value 使用 ‘=’ 分開,並且 key 和 value 中的空白字元都會被取代成 + ,其它特殊字元都會被使用 urlencode 方式進行編碼。

比如下面的 key-value 對:

name: Jonathan Doe

age: 23

formula: a + b == 13%!

會被編碼下面的原始資料:

name=Jonathan+Doe&age=23&formula=a+%2B+b+%3D%3D+13%25%21

PHP 會解析這些原始的 POST 資料,並且格式化成陣列,填充到 $_POST 中:



Array

(

[name] => Jonathan Doe

[age] => 23

[formula] => a + b == 13%!

)

$HTTP_RAW_POST_DATA 是 PHP 的一個預定義的變數,用來取得原始的 POST 資料,比如上面的情況下,$HTTP_RAW_POST_DATA 的值就是:

name=Jonathan+Doe&age=23&formula=a+%2B+b+%3D%3D+13%25%21

但是 $HTTP_RAW_POST_DATA 需要在 php.ini 中設定開啟:

always_populate_raw_post_data = On

還有一點,$HTTP_RAW_POST_DATA 不支援 enctype=」multipart/form-data」 方式傳遞的資料,這種情況下,我們要用 $_POST 取得欄位元的內容,$_FILES 來取得上傳的檔案訊息。

php://input

由於 $HTTP_RAW_POST_DATA 取決於 pho.ini 設定,有沒有更好的方法呢?

我們可以使用 php://input 來取得原始的 POST 資料,並且 php://input 比 $HTTP_RAW_POST_DATA 更少消耗記憶體,當然 php://input 和 $HTTP_RAW_POST_DATA 一樣,它也不支援 enctype=」multipart/form-data」 方式傳遞的資料。

由於 php://input 只是資料流,我們可以使用 file_get_contents() 函式去取得它的內容:

$post_data = file_get_contents("php://input");

print_r($post_data);

取得到的內容和 $HTTP_RAW_POST_DATA 是一樣的。

原始的 POST 資料有什麼用?

那麼原始的 POST 資料有什麼用?因為很多時候,接收到不是網頁 POST 過來的資料,而是可能通過其它方式 POST 過來的 「text/xml」 格式的資料,這些內容無法解析成 $_POST 陣列,這個時候我們就需要原始的 POST 資料進行處理。

想在手機查閱更多PHP資訊?免費下載【香港矽谷】Android App

在新視窗檢視







原文站台: 我愛水煮魚

本站長期承接WordPress 專案,詳情請加QQ:11497107 或是Email:denis@wpjam.com

如有WordPress 問題,請到WPJAM 問答提問! QQ 上不方便解答!轉載請留下原文鏈結。











在新視窗檢視

分享到Facebook

共1 則內容, 每頁顯示 10 則, 頁碼: [1]

言論純屬發表者個人意見,與本論壇立場無關,文章版權歸原作者所有,禁止未授權轉載。
不歡迎非法軟體,序號,及受著作權法保護的文章等資訊
論壇內容為使用者即時上載,論壇與本人將不對任何資源或內容負起任何相關法律責任
法律顧問:台灣法律網 劉孟錦律師
內容不當投訴,請電郵至flash2u@gmail.com

Powered By 神魂顛倒 Version 8.2.0
Processed in .06299 s, 2 queries.