Главная » Ошибки Битрикс » Не загружаются картинки: upload_max_filesize и post_max_size

Не загружаются картинки: upload_max_filesize и post_max_size

Схема диагностики лимитов загрузки файлов PHP и nginx в 1С-Битрикс

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

Два разных лимита PHP

; php.ini
upload_max_filesize = 20M
post_max_size = 25M

upload_max_filesize ограничивает размер одного загружаемого файла, post_max_size — размер всего POST-запроса целиком, включая все файлы формы вместе и остальные поля. Значение post_max_size обязательно должно быть больше upload_max_filesize — если формы допускают несколько файлов сразу (например, загрузка нескольких изображений товара), суммарный размер легко превышает лимит одного файла, даже когда каждый файл в отдельности укладывается в него.

Симптом при превышении post_max_size

Особенность превышения именно post_max_size в том, что PHP обрезает весь запрос целиком ещё до того, как скрипт успевает его обработать, — в результате форма показывает не конкретную ошибку о превышении размера, а просто теряет все данные формы, включая обычные текстовые поля, что сбивает с толку при диагностике: кажется, что форма вообще не отправляется.

Нужна помощь с Битрикс?





    Где реально менять эти значения

    На хостинге с доступом к php.ini напрямую — правка файла и перезапуск PHP-FPM. На виртуальном хостинге без прямого доступа — обычно есть панель управления с разделом настроек PHP для конкретного сайта или возможность переопределить значения через .htaccess (только если используется Apache с mod_php, для PHP-FPM этот способ не сработает):

    # .htaccess (только для Apache + mod_php)
    php_value upload_max_filesize 20M
    php_value post_max_size 25M

    Лимит на стороне nginx

    # nginx.conf, в блоке server или location
    client_max_body_size 25M;

    Даже если лимиты PHP настроены правильно, отдельный лимит nginx client_max_body_size может обрезать запрос ещё раньше, до того как он вообще дойдёт до PHP, — в этом случае симптом выглядит как ошибка 413 Request Entity Too Large, а не как молчаливая потеря данных формы. Оба лимита — PHP и nginx — нужно синхронизировать между собой, увеличение одного без другого не решает проблему полностью.

    Ограничение на стороне самого Битрикса

    Помимо серверных лимитов, некоторые компоненты и модули (например, файловые свойства инфоблока) имеют собственное ограничение максимального размера загружаемого файла, настраиваемое в параметрах компонента или свойства, — оно может оказаться строже серверного лимита и обрезать загрузку раньше, даже если PHP и nginx формально пропустили бы файл большего размера.

    Диагностика: где именно теряется файл

    Последовательная проверка от сервера к приложению: сначала лимиты nginx, затем PHP (upload_max_filesize, post_max_size), затем настройки конкретного компонента или свойства инфоблока в самом Битриксе. Проверка через phpinfo() или административную панель Настройки → Инструменты разработчика → Информация о системе показывает реально применённые PHP-лимиты, что полезно, когда неясно, применилось ли изменение php.ini после правки.

    Частые ошибки

    • Изменён только upload_max_filesize без post_max_size. Форма с несколькими файлами всё равно теряет данные при загрузке.
    • Синхронизирован только PHP-лимит, но не nginx. client_max_body_size обрезает запрос раньше, чем он доходит до PHP.
    • Изменение php.ini не подхватилось без перезапуска PHP-FPM. Диагностика продолжается с устаревшими значениями лимитов.
    • Собственный лимит компонента строже серверного. Загрузка обрезается раньше, чем позволяют настройки сервера.

    Итог

    Проблема с загрузкой изображений почти всегда сводится к рассинхронизации лимитов на разных уровнях — PHP (upload_max_filesize и post_max_size), веб-сервера (client_max_body_size в nginx) и, иногда, собственных ограничений конкретного компонента Битрикса. Проверять их стоит последовательно от сервера к приложению, а не менять значения наугад в одном месте, не проверив остальные.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний