Получить размер 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.