根據 PHP 官方文件,php://input 是一個唯讀資料流,允許讀取請求的原始資料(Raw POST Data)。它適用於 POST 請求,且 Content-Type 不等於 multipart/form-data 的情況。常見用途包括接收 JSON、XML 或二進位檔案流(如圖片上傳)。
<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>
$content = file_get_contents("php://input");
echo $content; // 輸出:name=tom&age=22
此時 $content 即為原始 POST 字串,未經 $_POST 解析。若需解析為陣列,可搭配 parse_str()。
舊版 PHP 提供 $HTTP_RAW_POST_DATA 變數,內容與 file_get_contents('php://input') 相同。但需在 php.ini 設定 always_populate_raw_post_data = On 並重啟服務。使用 php://input 免修改設定,更輕量、相容性更好。
適用於攝像頭拍照、行動裝置直接傳送二進位圖片流的場景:
file_get_contents('php://input') 取得原始二進位內容。file_put_contents('photo.jpg', $imgData)),即完成圖片儲存。此方式避免了 $_FILES 的暫存檔機制,效能更高,適合高頻、小型圖片上傳。
php://input 只能讀取一次,讀取後資料流指標移至末尾,若需多次使用請先存入變數。enctype="multipart/form-data" 的表單上傳(含檔案上傳),該情況請用 $_FILES。$HTTP_RAW_POST_DATA,PHP 7.0+ 移除,請全面改用 php://input。