(PHP 8 >= 8.4.0)
request_parse_body — Считывает и разбирает тело запроса, а затем возвращает результат
Функция считывает тело запроса и разбирает его с учётом типа содержимого, который указали
в заголовке Content-Type
. Пока поддерживается два типа
содержимого:
application/x-www-form-urlencoded
multipart/form-data
Главное назначение функции — разбирать содержимое тела, которое закодировали
в формате multipart/form-data
, в запросах с HTTP-глаголами кроме
POST
, которые не заполняют суперглобальные массивы
$_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.
Функция выбрасывает исключение RequestParseBodyException,
когда тело запроса не соответствует формату данных
заголовка Content-Type
.
Функция выбрасывает ошибку ValueError,
когда аргумент options
содержит недопустимые ключи
или недопустимые значения ключей.
Пример #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',
]);
// Обработка файлов, которые загрузили...
?>