Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как узнать размер post запроса?


Автор: andreymir 1.9.2009, 09:39
С клиента отправляется форма в формате multipart/form-data. Там приходят большие файлы ( до 100 мб). Пользователь может отменить отправку, и тогда на сервер приходит неполный запрос. Чтобы отбрасывать такие я решил сравнить хэдер Content-Length и фактический размер полученного запроса. Как в php получить размер тела запроса?

Автор: Ипатьев 1.9.2009, 09:58
Обычно в РНР используются встроенные механизмы обработки запросов, и нужды в ручной обработке нет.

Автор: pizzz 1.9.2009, 10:01
На вскидку 
Код

<?php

$total = 0;
foreach ($_POST AS $v) {
    $total += strlen($v);
}

?>


Еще надо учесть что $v может быть массивом...

Автор: Ипатьев 1.9.2009, 10:06
pizzz, вы точно внимательно прочитали вопрос?

Автор: andreymir 1.9.2009, 10:49
ну да, например, отправилось 20 мб файла из 100, и будет в $_FILES['filedata'] бинарных данных на 20 мб. + в $_POST будут не все поля, а те, которые идут в запросе до поля filedata. Как видите, запрос получен не целиком, но то что получено парсится и передается в мой серверный скрипт. И спрашивается нафига %) ... Надо такие ситуации как-то определять и игнорировать... Это я к тому, что нужда все-таки есть.

А вариант с 
Код

foreach ($_POST AS $v) {
    $total += strlen($v);

не подходит потому что так посчитается размер значений полей, а там ведь еще имена параметров, переводы строк и пр. в теле запрсоа.

Автор: Ипатьев 1.9.2009, 10:52
Цитата(andreymir @  1.9.2009,  10:49 Найти цитируемый пост)
и будет в $_FILES['filedata'] бинарных данных на 20 мб.

это реальная ситуация или гипотетическая?

Цитата(andreymir @  1.9.2009,  10:49 Найти цитируемый пост)
Надо такие ситуации как-то определять и игнорировать. 

может быть, стоит почитать об этом в документации?

Автор: andreymir 1.9.2009, 11:23
Да, тут я ошибся немного. В $_FILES['filedata'] будет

$_FILES['filedata']['size'] - тут 0
$_FILES['filedata']['tmp_name'] - тут пусто
$_FILES['filedata']['name'] - тут имя отправленного файла.

как видите, хоть файл и не пришел (пришел не полностью), но поле с таким именем есть.

Автор: Ипатьев 1.9.2009, 11:32
Скажите, вы читали в документации описание загрузки файлов?

Автор: andreymir 1.9.2009, 11:35
читал smile но там ничего не сказано, про то что пользователь может отменить загрузку файла :\

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)