Есть ли способ получить размер тела POST-запроса в PHP?
Получить размер POST-запроса в PHP
Ответ 1
Так просто как:
$size = (int) $_SERVER['CONTENT_LENGTH'];
Обратите внимание, что $_SERVER['CONTENT_LENGTH']
устанавливается только тогда, когда для HTTP-запроса используется метод POST (не GET). Это необработанное значение заголовка Content-Length
, как указано в RFC 7230.
В случае загрузки файлов, если вы хотите получить общий размер выгруженных файлов, вы должны $_FILE
итерацию по массиву $_FILE
для суммирования каждого $file['size']
. Точный общий размер может не совпадать с необработанным значением Content-Length
из-за накладных расходов кодирования данных POST. (Также обратите внимание, что вы должны проверять наличие ошибок загрузки, используя код $file['error']
каждого элемента $_FILES
, например UPLOAD_ERR_PARTIAL
для частичной загрузки или UPLOAD_ERR_NO_FILE
для пустой загрузки. См. Документацию по ошибкам загрузки файлов в руководстве по PHP.)
Ответ 2
Мое предположение, это в $_SERVER['CONTENT_LENGTH']
.
И если вам нужно это для обнаружения ошибок, загляните в $_FILES['filename']['error']
.
Ответ 3
Если вы пытаетесь выяснить, не удалось ли загрузить файл, вы должны использовать обработку ошибок PHP файла, как показано на приведенной ниже ссылке. Это самый надежный способ обнаружения ошибок при загрузке файлов:
http://us3.php.net/manual/en/features.file-upload.errors.php
Если вам нужен размер запроса POST без загрузки файлов, вы должны сделать это примерно так:
$request = http_build_query($_POST);
$size = strlen($request);
Ответ 4
Это может сработать:
$bytesInPostRequestBody = strlen(file_get_contents('php://input'));
// This does not count the bytes of the request headers on its body.
Ответ 5
Я думаю, вы ищете $HTTP_RAW_POST_DATA