Статьи

Как загрузить большие файлы в PHP

Загрузка файла из веб-формы на PHP очень проста. Онлайновое руководство содержит раздел « Обработка загрузки файлов », и на сайте pointpoint.com есть несколько статей, в том числе « Как обрабатывать загрузки файлов с помощью PHP » Кевина Янка.

Одним из самых популярных применений является загрузка изображений. Ваши пользователи могут отправлять фотографии из формы, не прибегая к FTP или другим сложным методам. HTML5 и Flash также допускают перетаскивание, поэтому с развитием браузеров эта операция, вероятно, станет проще.

Это где проблемы могут начаться. Производители камер постоянно хвастаются, что у них больше мегапикселей, чем у их конкурентов. Конечно, все это чепуха — если вы не профессиональный фотограф или вам не нужно печатать очень большие изображения, то все, что выше 4MP, довольно бессмысленно и качество объектива гораздо важнее. Тем не менее, даже компактные модели имеют 12-мегапиксельную карту, а мобильные телефоны имеют более 5-мегапиксельную В результате типичный снимок может быть размером 6 МБ.

По умолчанию PHP разрешает максимальную загрузку файла 2 МБ. Вы можете попросить пользователей изменить размер своих изображений перед загрузкой, но давайте посмотрим правде в глаза: они не будут. К счастью, мы можем увеличить лимит при необходимости.

Два параметра конфигурации PHP контролируют максимальный размер загрузки: upload_max_filesizepost_max_size Оба могут быть установлены, скажем, «10M» для файлов размером 10 мегабайт.

Однако вам также необходимо учитывать время, необходимое для завершения загрузки. Сценарии PHP обычно истекают через 30 секунд, но для загрузки файла размером 10 МБ при работоспособном широкополосном соединении потребуется не менее 3 минут (помните, что скорость загрузки обычно в пять раз ниже, чем скорость загрузки). Кроме того, манипулирование или сохранение загруженного изображения также может привести к превышению времени ожидания сценария. Поэтому нам нужно установить в PHP max_input_timemax_execution_time

Эти параметры можно установить в файле конфигурации php.ini Кроме того, если вы используете Apache, вы можете настроить параметры в файле .htaccess

 
php_value upload_max_filesize 10M
php_value post_max_size 10M
php_value max_input_time 300
php_value max_execution_time 300

Наконец, вы можете определить ограничения в вашем PHP-приложении:

 ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);

PHP также предоставляет функцию set_time_limit() поэтому вам не нужно устанавливать max_execution_time

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

У вас есть другие советы по загрузке больших файлов в PHP?