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