После обновления ядра 1С-Битрикс, модулей, шаблонов (например, Аспро) или перехода на PHP 8 на сайте могут возникать скрытые ошибки. Они не отображаются пользователям, но приводят к падению страниц или некорректной работе функционала. Для оперативной диагностики необходимо настроить логирование PHP-ошибок с привязкой к конкретным URL-адресам.
Зачем нужно логирование ошибок?
- Обнаружение падающих страниц, которые не видны обычным пользователям, но могут влиять на индексацию поисковыми роботами.
- Отслеживание ошибок PHP 8+ (TypeError, Fatal error, Deprecated), которые часто появляются после обновления версии PHP.
- Точная локализация проблем — определение конкретного файла, строки кода и URL, где происходит сбой.
- Безопасная диагностика без вывода ошибок на экран, что важно для работающего сайта.
Решение: добавляем код логирования в header.php
Для включения логирования необходимо добавить следующий код в самый начало файла header.php вашего шаблона, до любого вывода и до подключения /bitrix/header.php.
<?php
$__phpErrorLogFile = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/php_errors_site.log';
if (!defined('LOG_PHP_ERRORS_ONCE')) {
define('LOG_PHP_ERRORS_ONCE', true);
// Отключаем вывод ошибок на экран
@ini_set('display_errors', '0');
@ini_set('display_startup_errors', '0');
@ini_set('log_errors', '0');
@error_reporting(E_ALL);
// Функция записи в лог
$__w = function ($lvl, $msg, $file = '', $line = 0) use ($__phpErrorLogFile) {
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$url = ($scheme . '://' . ($_SERVER['HTTP_HOST'] ?? 'CLI') . ($_SERVER['REQUEST_URI'] ?? ''));
$dt = date('Y-m-d H:i:s');
$msg = str_replace(["\r", "\n"], [' ', ' '], (string)$msg);
@file_put_contents($__phpErrorLogFile, "[$dt] [$lvl] $msg | $file:$line | $url\n", FILE_APPEND | LOCK_EX);
};
// Обработчик обычных ошибок
set_error_handler(function ($errno, $errstr, $errfile, $errline) use ($__w) {
if (!(error_reporting() & $errno)) return false;
$__w('PHP', $errstr, $errfile, $errline);
return false;
});
// Обработчик исключений
set_exception_handler(function ($e) use ($__w) {
$__w('EXCEPTION', get_class($e) . ': ' . $e->getMessage(), $e->getFile(), $e->getLine());
});
// Обработчик фатальных ошибок
register_shutdown_function(function () use ($__w) {
$e = error_get_last();
if ($e && in_array((int)$e['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR], true)) {
$__w('FATAL', $e['message'] ?? '', $e['file'] ?? '', (int)($e['line'] ?? 0));
}
});
}
?>
Как это работает?
- Код создает лог-файл
/bitrix/php_interface/php_errors_site.log.
- Перехватывает все типы ошибок PHP (включая фатальные и исключения).
- Записывает каждую ошибку в лог с указанием:
- Даты и времени
- Типа ошибки (PHP, EXCEPTION, FATAL)
- Сообщения об ошибке
- Файла и строки кода
- Полного URL, где произошла ошибка
- При этом ошибки не отображаются пользователям на экране.
Пример записи в логе
[2025-03-15 14:32:11] [FATAL] Cannot access offset of type string on string | /bitrix/modules/aspro.max/classes/general/CMax.php:1467 | https://site.ru/contacts/
Важные рекомендации
- Используйте код для диагностики — после устранения ошибок рекомендуется удалить его из шаблона.
- На работающем сайте не стоит постоянно логировать
E_NOTICE и E_DEPRECATED, чтобы не создавать излишнюю нагрузку на диск.
- Идеальный сценарий использования:
- Установить код после обновлений (ядро, модули, PHP).
- Провести обход сайта с помощью робота или вручную.
- Проанализировать лог-файл и исправить найденные ошибки.
- Удалить код из шаблона.
- Перед внесением изменений создайте резервную копию файла
header.php.
Заключение
Представленное решение позволяет безопасно и эффективно диагностировать скрытые ошибки PHP после любых обновлений на сайте под управлением 1С-Битрикс. Логирование с привязкой к URL дает максимально полную информацию для быстрого устранения проблем, что особенно важно при работе с PHP 8 и новыми версиями ядра.
После обновления ядра 1С-Битрикс, модулей, шаблонов (например, Аспро) или перехода на PHP 8 на сайте могут возникать скрытые ошибки. Они не отображаются пользователям, но приводят к падению страниц или некорректной работе функционала. Для оперативной диагностики необходимо настроить логирование PHP-ошибок с привязкой к конкретным URL-адресам.
Зачем нужно логирование ошибок?
Решение: добавляем код логирования в header.php
Для включения логирования необходимо добавить следующий код в самый начало файла header.php вашего шаблона, до любого вывода и до подключения
/bitrix/header.php.Как это работает?
/bitrix/php_interface/php_errors_site.log.Пример записи в логе
Важные рекомендации
E_NOTICEиE_DEPRECATED, чтобы не создавать излишнюю нагрузку на диск.header.php.Заключение
Представленное решение позволяет безопасно и эффективно диагностировать скрытые ошибки PHP после любых обновлений на сайте под управлением 1С-Битрикс. Логирование с привязкой к URL дает максимально полную информацию для быстрого устранения проблем, что особенно важно при работе с PHP 8 и новыми версиями ядра.