PHP размер файла загрузки вопрос - PullRequest
4 голосов
/ 04 сентября 2010

Я знаю, что вы можете контролировать размер загрузки в PHP, используя $_FILES['userfile']['size'] > XXX

Мой вопрос, я полагаю, связан с производительностью.

Когда вы загружаете файл, я понимаю, что весь файлзагружается во временную папку, а затем у вас есть доступ к $_FILES

Что произойдет, если пользователь попытается загрузить файл 10gb?(в качестве примера очень большого файла)

Если попытка загрузки большого файла приводит к потере пропускной способности сервера, так как файл должен быть загружен до того, как его можно будет обработать / проверить.

Я знаю, что PHP имеет такие же значения времени ожидания и т. Д., Но мне любопытно, если пользователи попытаются загружать очень большие файлы, это влияет на производительность, даже если (например) максимальный размер файла составляет 2 МБ.

Этобеспокойство или что-то неизбежное и просто не беспокоиться.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 04 сентября 2010

Как apache, так и php имеют ограничение max-post для предотвращения такого поведения.

из php.ini:

; Maximum allowed size for uploaded files.
upload_max_filesize = 4M
; Maximum size of POST data that PHP will accept.
post_max_size = 8M
0 голосов
/ 04 сентября 2010

На самом деле, [size] не для контроля, это просто размер загруженного файла.К тому времени, когда ваш скрипт запускается, чтобы проверить это, PHP (и веб-сервер) уже обработали загруженные и применили свои собственные внутренние ограничения (Apache LimitRequestBody, PHP upload_max_size и т. Д.).

PHP позволит продолжить загрузку, если они были включены с помощью параметра file_uploads INI.Поскольку вы не можете доверять клиенту, предоставленный клиентом размер будет игнорироваться, и загрузка будет продолжаться до тех пор, пока он не завершит или не достигнет предела загрузки.Так что, да, это может привести к потере пропускной способности.

Если вы разрешите загрузку, то этим можно злоупотреблять.Но нет никакой реальной разницы между тем, кто загружает 10-гигабайтный файл или кто-то делает POST с 10-гигабайтными фиктивными данными.В любом случае, у вас есть 10 гигабайт данных.

...