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

PHP file_get_contents(php://input) 實戰範例詳解

     編輯:PHP 相關知識

在 PHP 開發中,php://input 是一個唯讀的資料流,允許讀取請求的原始資料(Raw POST Data)。這在處理非 application/x-www-form-urlencoded 或 multipart/form-data 格式的 POST 請求(如 JSON、XML)時特別有用。本文透過一個完整的表單提交範例,示範如何使用 file_get_contents('php://input') 獲取原始輸入,並與 $_POST 超全域變數進行對比。

範例場景:HTML 表單提交

首先建立一個簡單的 HTML 表單(index.html),包含使用者名稱、密碼欄位與送出按鈕:

<form action="action.php" method="post">
<input type="text" name="userName" id="userName" /><br/>
<input type="text" name="userPass" id="userPass" /><br/>
<input type="submit" value="ok" />
</form>

後端處理:action.php

在 action.php 中,我們同時輸出 $_POST 陣列與 php://input 讀取的原始字串:

<?php
$raw_post_data = file_get_contents('php://input', 'r');
echo "-------\$_POST------------------<br/>";
echo var_dump($_POST) . "<br/>";
echo "-------php://input-------------<br/>";
echo $raw_post_data . "<br/>";
?>

執行結果分析

當表單以預設的 application/x-www-form-urlencoded 方式提交時,$_POST 會自動解析為關聯陣列,而 php://input 則返回未解析的原始查詢字串(如 userName=test&userPass=123456)。

PHP_POST_輸出結果

php_input_原始資料

關鍵差異與適用場景

  • $_POST:僅支援 application/x-www-form-urlencoded 與 multipart/form-data,自動解析為陣列。
  • php://input:可讀取任何格式的原始 POST 資料(JSON、XML 等),但無法讀取 multipart/form-data(檔案上傳)。
  • 記憶體效率:php://input 不依賴 php.ini 的 enable_post_data_reading 設定,且不會將資料預載入記憶體,適合大量資料處理。

最佳實踐建議

開發 API 介接時,若客戶端發送 Content-Type: application/json,務必使用 file_get_contents('php://input') 獲取原始 JSON 字串,再搭配 json_decode() 解析。此時 $_POST 將為空陣列。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved