PHP Conference Japan 2024

request_parse_body

(PHP 8 >= 8.4.0)

request_parse_body讀取並解析請求主體,然後返回結果

說明

request_parse_body(?陣列 $options = null): 陣列

此函數會讀取請求主體並根據 Content-Type 標頭進行解析。目前支援兩種內容類型:

  • application/x-www-form-urlencoded
  • multipart/form-data

此函數主要用於解析 HTTP 方法非 POSTmultipart/form-data 請求,這些請求不會自動填入 $_POST$_FILES 超全域變數。

注意

request_parse_body() 會消耗請求主體,而不會將其緩衝到 php://input 串流。

參數

options
options 參數接受一個關聯式陣列,以覆寫以下全域 php.ini 設定,用於解析請求主體。
  • max_file_uploads
  • max_input_vars
  • max_multipart_body_parts
  • post_max_size
  • upload_max_filesize

回傳值

request_parse_body() 會回傳一個陣列對,索引 0$_POST 的等效值,索引 1$_FILES 的等效值。

錯誤/例外

當請求主體根據 Content-Type 標頭判斷為無效時,會拋出 RequestParseBodyException 例外。

options 包含無效的鍵或對應鍵的值無效時,會拋出 ValueError 例外。

範例

範例 #1 request_parse_body() 範例

<?php
// 解析請求並將結果儲存在 $_POST 和 $_FILES 超全域變數中。
[$_POST, $_FILES] = request_parse_body();
// 顯示某些已傳輸檔案的內容
echo file_get_contents($_FILES['file_name']['tmp_name']);
?>

範例 #2 使用自訂選項的 request_parse_body() 範例

<?php
// form.php

assert_logged_in();

// 僅針對此表單,我們允許更大的上傳大小。
[$_POST, $_FILES] = request_parse_body([
'post_max_size' => '10M',
'upload_max_filesize' => '10M',
]);

// 對上傳的檔案執行一些操作。
?>
新增筆記

使用者貢獻的筆記

此頁面沒有使用者貢獻的筆記。
To Top