Главная » Ошибки Битрикс » Как отключить вывод ошибок и Deprecated в Битрикс

Как отключить вывод ошибок и Deprecated в Битрикс

Схема разделения вывода ошибок для посетителя и логирования для разработчика в 1С-Битрикс

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

Разница между отключением вывода и отключением логирования

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

Настройка через php.ini

; php.ini на боевом сервере
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE

display_errors = Off скрывает вывод ошибок от посетителя, а log_errors = On с указанным путём сохраняет запись ошибки в файл для последующей проверки — оба параметра стоит настраивать вместе, а не отключать вывод без включения логирования, иначе информация об ошибке теряется полностью, а не просто скрывается от постороннего просмотра.

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





    Настройка на уровне Битрикса

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

    Deprecated-предупреждения при обновлении версии PHP

    Массовое появление Deprecated-предупреждений часто совпадает с обновлением версии PHP на сервере — новая версия языка помечает устаревшим синтаксис или функции, которые раньше работали без предупреждений. Скрытие этих предупреждений от посетителя через error_reporting — временная мера, а не решение самой проблемы: код, вызывающий Deprecated-предупреждения, стоит постепенно актуализировать, поскольку в будущих версиях PHP устаревшая функциональность может быть удалена полностью, а не просто помечена предупреждением.

    Разное поведение на dev и prod окружениях

    ; локальное окружение разработки
    display_errors = On
    error_reporting = E_ALL
    
    ; боевой сервер
    display_errors = Off
    error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE

    Настройки вывода ошибок для окружения разработки и боевого сервера должны различаться осознанно — на локальной машине разработчику полезно видеть все ошибки и предупреждения сразу на экране для быстрой отладки, тогда как на проде это недопустимо для посетителя, но должно оставаться доступным через лог для последующего анализа разработчиком.

    Обработчик ошибок для критичных сбоев

    <?php
    
    set_error_handler(function ($errno, $errstr, $errfile, $errline) {
        AddMessage2Log("PHP Error: $errstr in $errfile:$errline", 'php.errors');
        return true; // подавить стандартный вывод
    });

    Для более тонкого контроля над обработкой ошибок вместо простой настройки display_errors можно зарегистрировать собственный обработчик, направляющий ошибки в журнал событий Битрикса вместо стандартного файла лога PHP, — это удобно, когда вся диагностика проекта уже централизована в одном месте через штатный журнал системы, а не разбросана по нескольким разным источникам логов.

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

    • Ошибки отключены полностью, без логирования вовсе. Реальные проблемы остаются незамеченными, поскольку информация о них теряется, а не просто скрывается от постороннего просмотра.
    • Deprecated-предупреждения просто скрыты, а не устранены в коде. Риск сломанной функциональности при будущем обновлении PHP, когда устаревшая возможность будет удалена полностью.
    • Одинаковые настройки вывода ошибок на dev и prod. Либо неудобная отладка локально, либо небезопасный вывод посетителям на боевом сервере.

    Итог

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

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

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

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