Получить размер POST-запроса в PHP - PullRequest
14 голосов
/ 01 сентября 2009

Есть ли способ получить размер тела POST-запроса в PHP?

Ответы [ 5 ]

35 голосов
/ 15 июля 2010

Так же просто, как:

$size = (int) $_SERVER['CONTENT_LENGTH'];

Обратите внимание, что $_SERVER['CONTENT_LENGTH'] устанавливается только в том случае, если для HTTP-запроса используется метод POST (не GET). Это необработанное значение заголовка Content-Length, как указано в RFC 7230 .

В случае выгрузки файлов, если вы хотите получить общий размер выгруженных файлов , вы должны перебрать массив $_FILE для суммирования каждого $file['size']. Точный общий размер может не совпадать с необработанным значением Content-Length из-за накладных расходов кодирования данных POST. (Также обратите внимание, что вы должны проверять наличие ошибок при загрузке, используя $file['error'] код каждого элемента $_FILES, например, UPLOAD_ERR_PARTIAL для частичной загрузки или UPLOAD_ERR_NO_FILE для пустой загрузки. руководство по PHP.)

5 голосов
/ 01 сентября 2009

Я думаю, это в $_SERVER['CONTENT_LENGTH'].

А если вам нужно это для обнаружения ошибок, загляните в $_FILES['filename']['error'].

4 голосов
/ 01 сентября 2009

Если вы пытаетесь выяснить, не удалась ли загрузка файла, вам следует использовать обработку ошибок файла PHP, как показано по ссылке ниже. Это самый надежный способ обнаружения ошибок при загрузке файлов:
http://us3.php.net/manual/en/features.file-upload.errors.php

Если вам нужен размер POST-запроса без каких-либо загрузок файлов , вы сможете сделать это примерно так:

$request = http_build_query($_POST);
$size = strlen($request);
2 голосов
/ 01 сентября 2009

Это может сработать:

$bytesInPostRequestBody = strlen(file_get_contents('php://input'));
// This does not count the bytes of the request's headers on its body.
0 голосов
/ 01 сентября 2009

Я думаю, вы ищете $HTTP_RAW_POST_DATA

...