PHP request_parse_body 函数
最后修改于 2025 年 4 月 4 日
PHP 的 request_parse_body
函数用于解析 HTTP 请求体。它能够处理各种内容类型,如表单数据、JSON 和文件上传。
基本定义
request_parse_body
处理原始的 HTTP 请求体内容。它会自动检测内容类型并进行相应的解析。
语法:request_parse_body(): array
。返回解析后的数据作为数组。适用于 POST、PUT 和 PATCH 请求。需要 PHP 8.1 或更高版本。
基本表单数据解析
此示例演示了如何解析标准的 application/x-www-form-urlencoded 格式的 POST 数据。
<?php declare(strict_types=1); $data = request_parse_body(); echo "Username: " . ($data['username'] ?? ''); echo "Password: " . ($data['password'] ?? '');
此代码解析使用 application/x-www-form-urlencoded 发送的表单数据。该函数返回一个包含表单字段和值的关联数组。
JSON 请求解析
本示例展示了如何解析请求体中发送的 JSON 数据。
<?php declare(strict_types=1); $data = request_parse_body(); echo "Name: " . ($data['name'] ?? ''); echo "Age: " . ($data['age'] ?? '');
当 Content-Type 为 application/json 时,该函数会自动将 JSON 解码为 PHP 数组。无需手动进行 json_decode。
文件上传处理
此示例演示了如何使用 request_parse_body 处理文件上传。
<?php declare(strict_types=1); $data = request_parse_body(); $file = $data['file'] ?? null; if ($file && $file['error'] === UPLOAD_ERR_OK) { move_uploaded_file($file['tmp_name'], 'uploads/' . $file['name']); echo "File uploaded successfully"; }
对于 multipart/form-data 请求,文件上传会被自动处理。文件数据结构与 $_FILES 类似,但会与其它表单数据合并。
原始输入处理
本示例展示了在需要时如何访问原始请求体。
<?php declare(strict_types=1); $data = request_parse_body(); $raw = file_get_contents('php://input'); echo "Parsed data: "; print_r($data); echo "Raw data: " . $raw;
虽然 request_parse_body 负责解析,但您仍然可以访问原始输入。这对于自定义内容类型或调试目的非常有用。
内容类型检测
此示例演示了该函数如何处理不同的内容类型。
<?php declare(strict_types=1); $data = request_parse_body(); $contentType = $_SERVER['CONTENT_TYPE'] ?? ''; echo "Content-Type: $contentType\n"; echo "Parsed data: "; print_r($data);
该函数会自动检测和处理不同的内容类型。它开箱即用地支持表单数据、JSON 和 multipart/form-data。
最佳实践
- 验证:在使用解析后的数据之前,请务必进行验证。
- 错误处理:检查解析错误。
- 内存:注意处理大型文件上传。
- 安全:对用户输入进行清理。
- 内容类型:验证预期的内容类型。
来源
本教程通过处理不同 HTTP 请求体类型的实际示例,介绍了 PHP 的 request_parse_body
函数。
作者
列出 所有 PHP 教程。