Описать проблему ↗

Формы и почта

Форма не отправляет файл: размер, формат и права записи

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

Редакция «починимсайт» · Обновлено · 3 мин. чтения

Что происходит и с чего начать

Файл проходит несколько проверок: браузер отправляет данные, веб-сервер принимает запрос, PHP обрабатывает загрузку, а приложение сохраняет результат. На каждом уровне могут быть свои ограничения. Поэтому разрешённый размер в подписи формы ещё не доказывает, что весь путь допускает такой файл. Начните с небольшого безопасного примера и сравните его с проблемным. Важны точный размер, формат и количество вложений: общий объём формы может оказаться важнее размера каждого файла отдельно.

Что можно проверить самостоятельно

  1. Проверьте маленький файл поддерживаемого формата и запишите результат. Затем сравните с проблемным размером, не используя личные документы клиентов в качестве тестового материала.
  2. Уточните максимальный размер, количество файлов и разрешённые форматы в интерфейсе. Отметьте, сохраняется ли остальной текст формы после отказа и понятна ли причина пользователю.
  3. Сообщите, менялись ли хостинг, настройки PHP или папка хранения. Проверьте доступное место в панели, если оно видно, но не выдавайте всем каталогам полные права наугад.

Как понять результаты проверки

Разработчик согласует ограничения веб-сервера, PHP и приложения и проверяет временное хранение. Формат должен проверяться на сервере, а не только по расширению имени: переименование файла не меняет его содержимое. Место хранения также должно исключать исполнение загруженного материала как программы. Для владельца практический результат — понятные ограничения до отправки и конкретное сообщение при отказе. Техническое увеличение допустимого объёма без оценки ресурсов может лишь перенести проблему на память, диск или длительность обработки.

Что проверяет разработчик

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

  1. Сравните маленький и большой файл допустимого формата. Посмотрите HTTP-ответ: например, отказ по размеру до PHP отличается от ошибки приложения.
  2. Сверьте ограничения тела запроса, upload_max_filesize и post_max_size с настройками формы. Проверьте код ошибки загрузки, а не только наличие имени файла.
  3. Проверьте временный каталог, свободное место и права пользователя PHP на конечную папку. После переноса эти параметры часто меняются.

На что обратить внимание

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

Как исправляют причину

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

Как убедиться, что проблема решена

Проверьте файл ниже лимита, выше лимита и запрещённого типа. Допустимое вложение должно сохраниться, а отказ — оставить пользователю текст обращения.

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