Настройка php.ini для 1C-Битрикс: подробное руководство администратора

Раздел: Администрирование веб-приложений -> Настройка PHP для CMS

Основные настройки php.ini для 1C-Битрикс

Корректная работа CMS 1C-Битрикс требует определённых значений параметров PHP. Неправильная конфигурация приводит к обрыву загрузки файлов, ошибкам памяти, сбоям агентов и пустым страницам. Ниже представлено оптимальное решение и альтернативные подходы для разных условий эксплуатации.

Какой конфигурации php.ini достаточно для стабильной работы стандартного проекта?

Базовый набор параметров, проверенный на тысячах проектов:


memory_limit = 512M
max_execution_time = 90
max_input_time = 90
post_max_size = 64M
upload_max_filesize = 64M
mbstring.func_overload = 2
mbstring.internal_encoding = UTF-8
date.timezone = Europe/Moscow
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
display_errors = Off
allow_url_fopen = On
safe_mode = Off
session.gc_maxlifetime = 1440

Bitrix php ini (настройка php.ini для 1c-битрикс)

Пояснение каждого параметра:

  • memory_limit – максимальный объём памяти для скрипта. 512 MБ достаточно для типового сайта. Для интернет-магазинов с большим числом товаров значение увеличивают до 1-2 ГБ.
  • max_execution_time – время выполнения скрипта в секундах. 90 с для обычных страниц, для агентов и импорта – 3600.
  • max_input_time – время на обработку входных данных (POST, GET).
  • post_max_size – максимальный размер передаваемых данных одним POST-запросом.
  • upload_max_filesize – максимальный размер загружаемого файла. Должен быть меньше или равен post_max_size.
  • mbstring.func_overload = 2 – включает многобайтовые режимы для строковых функций. Без этого Битрикс не сможет корректно работать с UTF-8.
  • mbstring.internal_encoding = UTF-8 – внутренняя кодировка скрипта.
  • date.timezone – часовой пояс (например, Europe/Moscow). Без него компоненты даты могут выдавать предупреждения.
  • error_reporting – уровень отображения ошибок. На боевом сервере скрываем Notice, Strict и Deprecated, чтобы не засорять логи.
  • display_errors = Off – скрыть вывод ошибок в браузер. Включать только на тестовой среде.
  • allow_url_fopen = On – разрешает открытие удалённых файлов. Требуется для обновлений и интеграций.
  • safe_mode = Off – устаревшая директива, отключена в PHP 7+.
  • session.gc_maxlifetime – время жизни сессии (в секундах). 1440 с = 24 мин. Для Битрикс часто увеличивают до 86400 (сутки).

Типичная ошибка: После изменения php.ini не перезагружен веб-сервер или PHP-FPM. Параметры не применяются. Решение: выполните sudo systemctl reload php8.2-fpm (или sudo service apache2 restart). Также проверьте через phpinfo(), что новые значения вступили в силу.

Как настроить PHP через .htaccess при отсутствии доступа к php.ini на shared-хостинге?

Если хостинг поддерживает директиву AllowOverride Options, можно задать значения через .htaccess в корневой папке.


php_value memory_limit 256M
php_value upload_max_filesize 32M
php_value post_max_size 48M
php_value max_execution_time 120
php_flag display_errors off
php_value mbstring.func_overload 2
php_value mbstring.internal_encoding UTF-8

Php ini wordpress (настройка php.ini для wordpress)

Обратите внимание: php_value и php_flag можно использовать только если PHP работает как модуль Apache. При FastCGI они не сработают – нужен .user.ini.

Ошибка 500 после добавления .htaccess – часто означает, что вы пытаетесь установить параметр, не поддерживаемый в данном режиме (например, php_value memory_limit при PHP-FPM). Убедитесь, что хостинг разрешает такие директивы, или перейдите на .user.ini.

Как использовать .user.ini для CGI/FastCGI?

Файл .user.ini (например, в корне сайта) применяется к папке и её подпапкам. Формат такой же, как в php.ini, но без секций.


memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 48M
max_execution_time = 120
display_errors = Off
mbstring.func_overload = 2
mbstring.internal_encoding = UTF-8
date.timezone = Europe/Moscow

Файл читается каждый раз при запросе; не требуется перезагрузка сервера. Однако на высоконагруженных проектах лучше использовать основной php.ini для производительности.

Проблема: Настройки из .user.ini не подхватываются, если используется кэш OPcache без перезагрузки. Решение: очистите кэш или отключите кэширование конфигурации.

Как временно увеличить лимиты для одного скрипта через ini_set?

Для редких операций (импорт каталога, генерация отчётов) можно изменить параметры непосредственно в PHP-коде:

<?php
// В начале скрипта
ini_set('memory_limit', '1024M');
ini_set('max_execution_time', 600);
ini_set('max_input_time', 600);
?>

Этот способ работает, если скрипт не был предварительно ограничен директивами php_admin_value в конфигурации веб-сервера.

Ошибка: Установка ini_set('memory_limit', '-1') не отменяет лимит, если memory_limit жестко задан через php_admin_value. Проверьте доступные значения через ini_get_all().

Какие параметры нужны для выполнения агентов в командной строке (CLI)?

Агенты Битрикс часто запускаются по cron. Для консольного PHP лучшие настройки:


memory_limit = 1G
max_execution_time = 0 ; бесконечное время
max_input_time = -1 ; отключает ограничение

В файле php.ini для CLI (обычно /etc/php/8.2/cli/php.ini) эти значения можно задать отдельно. Также убедитесь, что date.timezone установлен.

Сбой агентов: Если агенты не выполняются, проверьте, что PHP-CLI использует корректный php.ini. Выполните php --ini и укажите полный путь при запуске: php -c /etc/php/8.2/cli/php.ini /home/bitrix/www/bitrix/modules/main/tools/cron_events.php.

Как включить подробные ошибки PHP для отладки на тестовой копии?

Для поиска проблем включите вывод всех ошибок:


error_reporting = E_ALL
display_errors = On
display_startup_errors = On
; Рекомендуется также xdebug
xdebug.mode = develop
xdebug.start_with_request = yes

После отладки обязательно верните display_errors = Off на боевом сервере, чтобы не раскрыть конфиденциальную информацию.

Пустая страница при включении ошибок – возможно, скрипт падает раньше, чем инициализируется обработчик ошибок. Используйте error_log и смотрите журнал сервера: tail -f /var/log/apache2/error.log.

Проверка текущих настроек через phpinfo()

Пример
<?php
// Создайте файл phpinfo.php в корне сайта
phpinfo();
?>

Результат – таблица со всеми директивами. Ищите раздел Core, там memory_limit, upload_max_filesize и прочее. Также обратите внимание на mbstring и date.

Пример конфигурации для проекта с большим импортом (до 200 МБ)

Пример

memory_limit = 1G
post_max_size = 250M
upload_max_filesize = 200M
max_execution_time = 600
max_input_time = 600

Настройка через .htaccess для WordPress совместно с Битрикс (если нужно)

Пример

# В корневой .htaccess
php_value memory_limit 512M
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_flag magic_quotes_gpc Off

Результат: при загрузке больших CSV-файлов через административную панель Битрикс не будет ошибок 413 (Request Entity Too Large).

Вывод актуальных значений из командной строки

Пример

php -r "echo 'memory_limit: ' . ini_get('memory_limit') . PHP_EOL;"
php -r "echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . PHP_EOL;"
memory_limit: 512M
upload_max_filesize: 64M

Сравнение производительности при разных значениях opcache

Пример

; Рекомендуемые для Битрикс
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2

Неправильная настройка opcache может привести к тому, что изменения в PHP-файлах не применяются мгновенно. После обновления Битрикс требуется сброс кэша OPcache.

Пример полного файла .user.ini для типового проекта

Пример

; .user.ini в корне сайта
memory_limit = 512M
max_execution_time = 90
max_input_time = 90
post_max_size = 64M
upload_max_filesize = 64M
mbstring.func_overload = 2
mbstring.internal_encoding = UTF-8
date.timezone = Europe/Moscow
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
display_errors = Off
allow_url_fopen = On
session.gc_maxlifetime = 86400

Настройка php.ini для 1C-Битрикс - comments

En
Bitrix php ini (php)