Распространённые подводные камни

Элементу MAX_FILE_SIZE нельзя указывать размер файла, который превышает предел, который установили в директиве upload_max_filesize файла php.ini. Ограничение по умолчанию составляет 2 мегабайта.

Если установили ограничения памяти, может потребоваться увеличение значения опции memory_limit. Убедитесь, что значение директивы memory_limit достаточно.

Время, которое потребуется для работы скрипта, может превысить значение опции max_execution_time, если для директивы установили маленькое значение. Убедитесь, что значение директивы max_execution_time достаточно.

Замечание: Директива max_execution_time влияет только на время выполнения самого скрипта. Время, которое заняли действия за пределами скрипта, — системные вызовы функций system() или sleep(), запросы к базе данных, время, которое заняла загрузка файла на сервер, и т. д. — не учитывается при определении максимального времени работы скрипта.

Внимание

Директива max_input_time устанавливает максимальное время в секундах, в течение которого скрипту разрешается получать входные данные; время загрузки файла тоже включается. Загрузка больших файлов, набора файлов или обработка запросов пользователей с медленными соединениями может превысить значение по умолчанию в 60 секунд.

Сервер не загрузит большие файлы, если для директивы post_max_size установили слишком маленькое значение. Проверьте, что значение директивы post_max_size достаточно.

Опция max_file_uploads контролирует максимальное количество файлов, которые загружают на сервер в течение одного запроса. Суперглобальный массив $_FILES прекратит обработку файлов, как только достигнет ограничения, если загружается больше файлов, чем в ограничении. Например, если значение директивы max_file_uploads равняется 10, массив $_FILES не будет содержать больше 10 элементов.

Без проверки того, с каким файлом ведётся работа, пользователи смогут получить доступ к конфиденциальной информации других каталогов.

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

Разработчикам нельзя смешивать обычные input-поля и поля загрузки файлов в одной и той же переменной формы (например, нельзя указывать в имени input-элемента значение foo[]).