ZetCode

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 数据。

form_parsing.php
<?php

declare(strict_types=1);

$data = request_parse_body();
echo "Username: " . ($data['username'] ?? '');
echo "Password: " . ($data['password'] ?? '');

此代码解析使用 application/x-www-form-urlencoded 发送的表单数据。该函数返回一个包含表单字段和值的关联数组。

JSON 请求解析

本示例展示了如何解析请求体中发送的 JSON 数据。

json_parsing.php
<?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 处理文件上传。

file_upload.php
<?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 类似,但会与其它表单数据合并。

原始输入处理

本示例展示了在需要时如何访问原始请求体。

raw_input.php
<?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 负责解析,但您仍然可以访问原始输入。这对于自定义内容类型或调试目的非常有用。

内容类型检测

此示例演示了该函数如何处理不同的内容类型。

content_type_detection.php
<?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。

最佳实践

来源

PHP request_parse_body 文档

本教程通过处理不同 HTTP 请求体类型的实际示例,介绍了 PHP 的 request_parse_body 函数。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了超过 1400 篇文章和 8 本电子书。我在编程教学方面拥有超过十年的经验。

列出 所有 PHP 教程