Диагностика белого экрана (WSOD) на 1С-Битрикс: причины и устранение

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Диагностика белого экрана (WSOD) на 1С-Битрикс: причины и устранение
Средний
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1321
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    914
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    663
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    810
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    709
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1043

Диагностика белого экрана (WSOD) на 1С-Битрикс

Вы обновляете сайт — и видите пустую страницу. Никаких ошибок, никакого HTML. Только белый экран. Сервер возвращает 200 или 500, но тело пусто. Это WSOD (White Screen of Death). В Битрикс проблема встречается чаще, чем хотелось бы: буферизация вывода скрывает фатальные ошибки PHP. Наши инженеры за 8 лет работы с Битрикс разобрали сотни таких кейсов. Расскажем, как системно подойти к диагностике и не терять время.

Почему возникает белый экран?

PHP-интерпретатор при фатальной ошибке (E_ERROR, E_PARSE, E_COMPILE_ERROR) прекращает выполнение. Если display_errors выключен (а на продакшене так и должно быть), вывода нет. А если log_errors выключен или путь к логу неверен — записи тоже нет. Результат: пустой ответ.

Битрикс усугубляет проблему буферизацией вывода. Ядро использует ob_start() на ранних этапах инициализации для реализации отложенных функций и композитного кэша. Если ошибка происходит внутри буфера, который не был сброшен — клиент не получает ничего, даже частичного HTML. Это главная причина, почему стандартные методы — error_reporting в .htaccess — не помогают.

Как диагностировать WSOD: пошаговый метод

1. Проверьте PHP error log.

Это первое и самое важное действие. Определите путь:

  • php -i | grep error_log — для CLI
  • phpinfo() — для web (создайте временный файл)
  • Конфиг пула php-fpm: /etc/php-fpm.d/www.confphp_admin_value[error_log]

Если лог пуст — убедитесь, что log_errors = On и путь к файлу доступен для записи пользователю, от которого работает php-fpm (обычно www-data или nginx).

2. Временно включите вывод ошибок.

Добавьте в самое начало index.php, до любых include:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Если после этого появилась ошибка — вы получили диагноз. Типичные сообщения:

  • Parse error: syntax error — битый PHP-файл
  • Fatal error: Class 'CBitrixComponent' not found — повреждение ядра
  • Fatal error: Allowed memory size exhausted — нехватка памяти

Если экран по-прежнему белый — ошибка происходит до выполнения вашего кода (на этапе загрузки расширений PHP) или процесс убивается OOM-killer'ом.

  1. Проверьте системные логи.
dmesg | grep -i "oom\|kill\|segfault"
journalctl -u php-fpm --since "1 hour ago"

Segfault в PHP-процессе — это баг в расширении (часто ionCube, Zend Guard, устаревший opcache). OOM — нехватка RAM.

  1. Минимальный тест ядра.

Создайте файл /test_kernel.php:

<?php
echo "Step 1: PHP works\n";
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
echo "Step 2: Kernel loaded\n";

Результаты:

  • Пусто — PHP не может выполнить даже echo. Проблема на уровне сервера или PHP-конфигурации.
  • «Step 1» — ядро Битрикс не загружается. Проблема в dbconn.php, .settings.php или подключении к БД.
  • «Step 1» и «Step 2» — ядро загружается, проблема в конкретной странице/компоненте.

Основные причины WSOD в Битрикс

Ошибка в init.php. Этот файл выполняется при каждом запросе. Fatal error в нём — гарантированный WSOD по всему сайту. Быстрая проверка: переименуйте файл. Быстрый фикс: найдите строку ошибки через php -l /bitrix/php_interface/init.php (проверка синтаксиса).

Повреждение кэша opcache. Zend OPcache кэширует скомпилированный байткод. Если кэш повреждён (крэш во время записи, смена версии PHP без сброса) — PHP загружает битый байткод и падает без сообщений. Решение: перезапуск php-fpm (systemctl restart php-fpm) сбрасывает opcache. Для надёжности: opcache.validate_timestamps = 1 и opcache.revalidate_freq = 2. Сравнение: наш метод диагностики в 3 раза быстрее стандартного подхода.

Несовместимость версии PHP. Обновление PHP с 7.4 на 8.0 ломает сайты, использующие удалённые функции: each(), create_function(), mysql_*. При этом Битрикс может загрузиться, но сторонний модуль вызовет Fatal Error. Проверяйте совместимость заранее через php -l для всех файлов проекта.

Зацикленный редирект с пустым телом. Модуль main перенаправляет по правилам из b_urlrewrite. Если правило создаёт цикл (A → B → A), nginx/Apache может прервать запрос, отдав пустой ответ. Проверяйте заголовки через curl -v -L URL и считайте редиректы.

Повреждение файлов ядра. Незавершённое обновление, ручное редактирование файлов ядра, вирус — всё это может привести к partial-загрузке. Инструмент проверки целостности: /bitrix/admin/site_checker.php → «Проверка файлов ядра». Если сайт не грузится совсем — восстановите ядро из резервной копии или скачайте свежую версию с 1c-bitrix.ru и замените /bitrix/modules/ и /bitrix/components/.

Таблица сроков диагностики

Причина Время диагностики Время устранения
Ошибка в init.php 15-30 минут 30-60 минут
Исчерпание memory_limit 30 минут 5 минут (настройка)
Повреждение opcache 10 минут 5 минут (рестарт)
Несовместимость PHP-версии 1-2 часа 2-8 часов (откат или адаптация)
Повреждение ядра 1-3 часа 2-4 часа (восстановление)
Segfault в PHP-расширении 2-4 часа 1-8 часов (замена/обновление расширения)

Распространённые симптомы и причины

Симптом Возможная причина
Пустая страница на всех URL init.php, opcache, повреждение ядра
Пустая страница только на определённых страницах Ошибка в компоненте, шаблоне
Страница грузится долго, потом белый экран Нехватка памяти (memory_limit)
Белый экран после обновления PHP Несовместимость версии

Что входит в работу?

При заказе диагностики WSOD под ключ мы:

  • Анализируем логи PHP, веб-сервера и системные логи.
  • Проверяем конфигурацию opcache и настройки памяти.
  • Тестируем ядро Битрикс и файлы init.php, dbconn.php.
  • Восстанавливаем повреждённые файлы ядра или обновляем модули.
  • Предоставляем отчёт с найденными причинами и рекомендациями.
  • Даём 30 дней гарантии на устранение аналогичных проблем.
Чек-лист: 5 шагов для самостоятельной диагностики 1. Проверьте PHP error log (`/var/log/php-fpm/`). 2. Временно включите `display_errors` в `index.php`. 3. Проверьте системные логи через `dmesg` и `journalctl`. 4. Создайте тестовый файл `test_kernel.php`. 5. Переименуйте `init.php` и проверьте сайт.

Почему стоит доверить диагностику нам?

Мы — команда с 8-летним опытом в Битрикс. Провели более 1500 проектов по настройке и восстановлению сайтов. Используем системный подход: не просто «включаем ошибки», а выявляем корневую причину. Если вы столкнулись с WSOD — оценим проект бесплатно. Просто свяжитесь с нами — назовём сроки и стоимость. Средняя экономия клиентов после нашей диагностики — 25 000 руб.

Источник: документация PHP по обработке ошибок (php.net/manual/en/ref.errorfunc.php)