1. 程式人生 > 程式設計 >php使用file_get_contents(‘php://input‘)和$_POST的區別例項對比

php使用file_get_contents(‘php://input‘)和$_POST的區別例項對比

本文學習目的:

為什麼和第三方平臺對接介面的時候,在接收http請求資料包時,一般都是用fi程式設計客棧le_get_contents("php://input"),而不是用$_POST呢?

file_get_contents:將整個檔案讀入一個字串

在用php寫介面的時候,通常會將請求的資料通過json的形式傳送到指定的請求地址處,此時的file_get_contents(‘php://input')主要是用來獲取請求的原始資料。和 $HTTP_RAW_POST_DATA 比起來,php://inp程式設計客棧ut給記憶體帶來的壓力較小,並且不需要任何特殊的 php.ini 設定。

注意兩點:

資料程式設計
客棧
的提交方式應為POSTphp://input 不能用於接收enctype="multipart/form-data"表單提交的資料

1、舉一個簡單示例:

提交表單

<form action="" method="POST">
  姓名: <input type="text" name="name" value="tom" /><br />
  年齡:<input type="text" name="age" value="22" /><br />
  <input type="submit" value="Submit" />
</form>

後端控制器通過file_get_contents(‘php://input'),獲取請求原始資料流

<?php
$content = file_get_contents('php://input','r'); 
echo $content; 
//輸出name=tom&age=22
?>

2、在專案應用中,如攝像頭拍照,上傳儲存,就可以用到php://input。客戶端拍照後,把圖片流傳送到服務端,服務端使用file_get_getcontents(‘php://input')就能獲取到圖片流。

$_POST

$_POST只能接收Content-Type: application/x-www-form-urlencoded提交的資料,php會將http請求body相應資料填入到陣列_POST中,_POST陣列中的資料是進行urldecode()解析的結果。除了該Content-Type,還有 multipart/form-data型別的表單資料www.cppcns.com

也可以用$_POST接收。

四種常見的提交資料方式,分別如下:

定義和用法

enctype 屬性規定在傳送到伺服器之前應該如何對錶單資料進行編碼。預設地,表單資料會編碼為 "application/x-www-form-urlencoded"。就是說,在傳送到伺服器之前,所有字元都會進行編碼(空格轉換為 "+" 加號,特殊符號轉換為 ASCII HEX 值)。

enctype屬性值

Content-Type值 描述
application/x-www-form-urlencoded 在傳送前編碼所有字元(預設)
multipart/form-data

不對字元編碼。

在使用包含檔案上傳控制元件的表單時,必須使用該值。

text/plain 空格轉換為 "+" 加號,但不對特殊字元編碼。

text/xml

一種使用 HTTP 作為傳輸協議,XML 作為編碼方式的遠端呼叫規範。

總結:

1、Coentent-Type僅在取值為application/x-www-data-urlencoded和multipart/form- data兩種情況下,PHP才會將http請求資料包中相應的資料填入全域性變數$_POST中。

2、PHP不能識別的Content-Type型別的時候,會將http請求包中相應的資料填入變數$HTTP_RAW_POST_DATA中。

3、只有Coentent-Type為multipart/form-data的時候,PHP才不會將http請求資料包中的相應資料填入php: //input,否則其它情況都會。填入的長度,由Coententwww.cppcns.com-Length指定。

4、只有Content-Type為application/x-www-data-urlencoded時,php://input資料才跟$_POST資料相一致。

5、如果不能獲取的時候,比如Coentent-Type為text/xml、application/json、soap,請使用 file_get_contents('php://input');

到此這篇關於php使用file_get_contents(‘php://input‘)和$_POST的區別例項對比的文章就介紹到這了,更多相關php使用file_get_contents和$_POST內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!