首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 輸入流 php://input 使用詳解:接收原始 POST 數據與圖片流上傳實戰

     編輯:PHP 相關知識

什麼是 php://input?

根據 PHP 官方文件,php://input 是一個唯讀資料流,允許讀取請求的原始資料(Raw POST Data)。它適用於 POST 請求,且 Content-Type 不等於 multipart/form-data 的情況。常見用途包括接收 JSON、XML 或二進位檔案流(如圖片上傳)。

基本範例:接收表單資料

客戶端表單(HTML)

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

伺服器端處理(PHP)

$content = file_get_contents("php://input");
echo $content; // 輸出:name=tom&age=22

此時 $content 即為原始 POST 字串,未經 $_POST 解析。若需解析為陣列,可搭配 parse_str()。

關於 $HTTP_RAW_POST_DATA

舊版 PHP 提供 $HTTP_RAW_POST_DATA 變數,內容與 file_get_contents('php://input') 相同。但需在 php.ini 設定 always_populate_raw_post_data = On 並重啟服務。使用 php://input 免修改設定,更輕量、相容性更好。

實戰應用:接收圖片流並儲存

適用於攝像頭拍照、行動裝置直接傳送二進位圖片流的場景:

  1. 客戶端以二進位流(非 multipart/form-data)POST 圖片資料至伺服器。
  2. 伺服器使用 file_get_contents('php://input') 取得原始二進位內容。
  3. 將內容寫入檔案(如 file_put_contents('photo.jpg', $imgData)),即完成圖片儲存。

此方式避免了 $_FILES 的暫存檔機制,效能更高,適合高頻、小型圖片上傳。

注意事項

  • php://input 只能讀取一次,讀取後資料流指標移至末尾,若需多次使用請先存入變數。
  • 不支援 enctype="multipart/form-data" 的表單上傳(含檔案上傳),該情況請用 $_FILES。
  • PHP 5.6+ 已棄用 $HTTP_RAW_POST_DATA,PHP 7.0+ 移除,請全面改用 php://input。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved