Диагностика белого экрана (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.conf→php_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'ом.
- Проверьте системные логи.
dmesg | grep -i "oom\|kill\|segfault"
journalctl -u php-fpm --since "1 hour ago"
Segfault в PHP-процессе — это баг в расширении (часто ionCube, Zend Guard, устаревший opcache). OOM — нехватка RAM.
- Минимальный тест ядра.
Создайте файл /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)







