2010-09-04 4 views
4

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

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

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

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

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

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

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

Спасибо.

+0

+1 очень хороший вопрос –

ответ

3

Оба apache и php имеют ограничение максимального числа сообщений, чтобы предотвратить такое поведение.

из 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

Извините, возможно, я был не совсем понятен - я знаю, как предотвратить загрузку больших файлов, но было интересно, какое влияние на производительность оказывают пользователи, загружающие чрезвычайно большие файлы. – calum

+0

edit - вы говорите, что вышесказанное остановило бы загрузку, когда были достигнуты лимиты, или будет выполняться загрузка до тех пор, пока она не будет завершена/таймаут, независимо от – calum

+0

. Эти ограничения будут закрывать гнездо подключения после достижения предела. – aularon

0

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

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

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

+0

Спасибо за подтверждение. Я не думаю, что это огромная проблема в реальных ситуациях, но приятно знать – calum