Белый экран на сайте — это симптом: сервер или приложение не смогли сформировать нормальный ответ, а подробная ошибка осталась скрыта. Чаще всего причина находится в PHP, расширении CMS, шаблоне, версии PHP, PHP-FPM, правах доступа, заполненном диске или последнем обновлении.
Если сайт нужен прямо сейчас: не переустанавливайте CMS и не меняйте несколько настроек одновременно. Сначала зафиксируйте время сбоя, получите HTTP-код и найдите запись в error log. По одной строке Fatal error часто можно определить причину быстрее, чем за час случайных правок.
Что делать при белом экране сайта — короткий алгоритм
- Откройте проблемный URL и запомните точное время проверки.
- Проверьте HTTP-код: 200, 500, 502, 503 или 504 ведут к разным причинам.
- Откройте error log веб-сервера и PHP за эту же минуту.
- Вспомните последнее изменение: PHP, CMS, плагин, шаблон, перенос, Composer, права, конфигурация.
- Если сбой начался сразу после одного изменения — сначала отмените только его.
- Проверьте диск, inode, память и состояние PHP-FPM, если есть SSH/root.
- После исправления снова откройте страницу и убедитесь, что новая ошибка не появляется в журнале.
Ниже есть два маршрута: обычный виртуальный хостинг/ISPmanager без root и VPS/VDS/выделенный сервер с SSH. Выбирайте свой вариант и не выполняйте серверные команды, если у вас нет соответствующих прав.
Белый экран: что означает HTTP-код
| HTTP-код | Что чаще всего означает | Что проверить первым |
|---|---|---|
| 200, но страница пустая | ||
| вачена, пустой результат CMS | PHP log, журнал CMS, шаблон, последний изменённый файл | |
| 500 | Fatal error PHP, неверная конфигурация, .htaccess, приложение | error log PHP/Apache/Nginx, php -l, последнее изменение |
| 502 | Nginx не получил нормальный ответ от upstream | PHP-FPM, socket/port, состояние службы, журнал Nginx |
| 503 | Сервис недоступен или достигнут лимит ресурсов | |
| остинга, maintenance, нагрузка | ||
| 504 | Backend не успел ответить | долгий PHP/SQL/API-запрос, таймауты, нагрузка |
| 403 | Права, WAF/ModSecurity, запрет конфигурации | permissions, владелец, правила безопасности, .htaccess |
Если у вас обычный хостинг или ISPmanager и нет root-доступа
На виртуальном хостинге не нужно начинать с SSH-команд. Главная задача — получить журнал конкретного домена и проверить активную версию PHP.
Порядок проверки в ISPmanager
- Откройте нужный сайт в панели и убедитесь, что для него включён Error log.
- В настройках PHP включите log_errors. Для диагностики можно включить регистрацию всех ошибок, но вывод ошибок посетителю после проверки должен оставаться выключенным.
- Откройте белую страницу ещё раз и сразу посмотрите свежие строки журнала.
- Если проблема появилась после переключения версии PHP — временно верните предыдущую рабочую версию. После восстановления сайта уже исправляйте несовместимый код.
- В файловом менеджере отсортируйте файлы по времени изменения и проверьте то, что менялось непосредственно перед сбоем.
- Если CMS ведёт собственный журнал, сравните его время с серверным error log.
На сервере с ISPmanager ошибки сайта обычно собираются в журнал домена вида /var/www/httpd-logs/DOMAIN.error.log. Пользователю хостинга этот же журнал может быть доступен прямо из панели — без доступа root.
Практический совет: сначала копируйте последние 20–50 строк журнала в отдельный файл, и только потом очищайте кэш CMS или откатывайте обновление. Иначе можно стереть самый полезный след проблемы.
Если есть SSH: быстро посмотреть журнал сайта в ISPmanager
# Замените example.com на свой домен
sudo tail -n 100 /var/www/httpd-logs/example.com.error.log
# Смотреть новые ошибки в момент обновления белой страницы
sudo tail -f /var/www/httpd-logs/example.com.error.logЕсли у вас VPS, VDS или выделенный сервер
На сервере с SSH можно проверить не только PHP, но и весь путь запроса: веб-сервер → PHP-FPM → CMS → база данных. Для разных дистрибутивов отличаются имена служб и стандартные каталоги логов.
Для доступных у провайдера систем удобно разделить команды на три группы:
- Debian/Ubuntu: Ubuntu 22.04/24.04/26.04, Debian 12/13;
- RHEL-подобные: AlmaLinux 8/9/10, Rocky Linux 8/9/10, CentOS Stream 9/10, Oracle Linux 8/9, Fedora 43/44;
- FreeBSD: FreeBSD 14 ZFS.
Пути ниже — типовые. На сервере с панелью управления или нестандартной конфигурацией лог может быть перенесён, поэтому дополнительно смотрите активную конфигурацию Nginx/Apache и PHP-FPM.
Ubuntu и Debian: первичная диагностика
# HTTP-код и конечный URL
curl -sS -L -o /dev/null \
-w "HTTP=%{http_code} final=%{url_effective} time=%{time_total}s\n" \
https://example.com/problem-page
# Nginx / Apache
sudo tail -n 100 /var/log/nginx/error.log
sudo tail -n 100 /var/log/apache2/error.log
# Состояние сервисов
systemctl list-units --type=service --all --no-pager \
| grep -Ei 'nginx|apache2|php.*fpm|mariadb|mysql'
# Журналы за последние 10 минут
sudo journalctl --since "-10 min" --no-pager \
| grep -Ei 'php|fpm|nginx|apache|fatal|error|oom'
# Диск, inode, память
df -h
df -i
free -h
# Проверка конфигурации
sudo nginx -t
sudo apache2ctl configtest
# Проверить конкретный изменённый PHP-файл
php -l /var/www/example.com/file.phpAlmaLinux, Rocky Linux, CentOS Stream, Oracle Linux и Fedora
# HTTP
curl -sS -L -o /dev/null \
-w "HTTP=%{http_code} final=%{url_effective} time=%{time_total}s\n" \
https://example.com/problem-page
# Логи
sudo tail -n 100 /var/log/nginx/error.log
sudo tail -n 100 /var/log/httpd/error_log
# Сервисы
sudo systemctl --no-pager --full status nginx
sudo systemctl --no-pager --full status httpd
sudo systemctl --no-pager --full status php-fpm
# Журнал PHP-FPM и web
sudo journalctl -u php-fpm --since "-10 min" --no-pager
sudo journalctl -u nginx -u httpd --since "-10 min" --no-pager
# Ресурсы
df -h
df -i
free -h
# Конфигурация
sudo nginx -t
sudo httpd -t
# PHP
php --ini
php -l /var/www/example.com/file.phpFreeBSD 14 ZFS: что проверить
# Сервисы
service nginx status
service apache24 status
service php_fpm status
# Слушающие порты и процессы
sockstat -4 -6 -l
# Ресурсы
df -h
swapinfo -h
# Типовые логи — фактические пути сверяйте в конфигурации
tail -n 100 /var/log/nginx/error.log
# Проверка конфигурации
nginx -t
apachectl configtest
# PHP
php -v
php --ini
php -l /usr/local/www/example/file.phpКак понять, где именно ломается запрос
Белая страница сама по себе почти ничего не говорит. Намного полезнее ответить на три вопроса: какой HTTP-код, какой компонент записал ошибку и что изменилось перед первым сбоем.
HTTP 200, но экран полностью белый
Это часто означает, что веб-сервер и PHP отработали формально успешно, но приложение вернуло пустой вывод. Проверяйте журнал CMS, шаблон, ранний exit/die, обработчик исключений, ошибки шаблонизатора и конкретный маршрут.
HTTP 500
Ищите Fatal error, Parse error, необработанное исключение, неверную директиву конфигурации или ошибку после изменения кода. Код 500 — не диагноз; диагноз находится в журнале.
HTTP 502 или 504
Сначала проверяйте PHP-FPM/upstream и его журнал. 502 часто возникает, когда Nginx не может обратиться к нужному socket/port PHP-FPM; 504 — когда backend слишком долго отвечает.
Проверка HTTP без браузера
# Только статус
curl -sS -o /dev/null -w "%{http_code}\n" https://example.com/
# С редиректами и временем ответа
curl -sS -L -o /dev/null \
-w "final=%{url_effective}\nHTTP=%{http_code}\nIP=%{remote_ip}\ntime=%{time_total}s\n" \
https://example.com/
# Только заголовки
curl -sS -I https://example.com/Как включать PHP-диагностику и не показывать ошибки посетителям
На production-сайте безопаснее записывать ошибки в журнал, а не выводить их в HTML. PHP прямо предупреждает, что сообщения об ошибках могут раскрывать служебные данные. Поэтому для рабочей среды используйте log_errors=On и display_errors=Off.
Если нужен визуальный вывод ошибок, делайте это только на staging/локальной копии или запускайте проблемный PHP-файл из CLI.
Безопасные настройки PHP для рабочего сайта
; php.ini / .user.ini — если хостинг разрешает переопределение
display_errors=Off
display_startup_errors=Off
log_errors=On
error_reporting=E_ALLПоказать ошибку только при запуске PHP из CLI
php -d display_errors=1 \
-d display_startup_errors=1 \
-d error_reporting=-1 \
/path/to/problem-script.phpТипичная ошибка в логе → что она означает
| Фрагмент ошибки | Вероятная причина | Что делать |
|---|---|---|
| Allowed memory size exhausted | PHP исчерпал memory_limit или код потребляет слишком много памяти | |
| ; лимит повышать только после анализа | ||
| Parse error / unexpected token | Синтаксическая ошибка PHP | php -l проблемный файл, вернуть корректную версию |
| Call to undefined function | Нет расширения PHP или несовместимая версия кода | php -m, версия PHP, требуемое расширение |
| Class ... not found | Автозагрузка/Composer/дополнение CMS | проверить vendor/autoload, пакет, совместимость |
| Permission denied | Неверный владелец/права/политика безопасности | проверить owner/group и права конкретного пути |
| No space left on device | Заполнен диск или inode | df -h и df -i, освободить место |
| connect() to unix:... failed | PHP-FPM socket отсутствует или другой путь | состояние PHP-FPM, listen/socket в конфигурации |
| upstream timed out | Backend/SQL/API работает слишком долго | журнал приложения, медленные запросы, нагрузка, timeout |
| Primary script unknown | Nginx/PHP-FPM смотрят на разные пути SCRIPT_FILENAME | проверить fastcgi_param и root |
| Too many redirects / rewrite cycle | Ошибка rewrite/.htaccess/Nginx | проверить правила маршрутизации и журнал web-сервера |
Белый экран после обновления PHP
Это один из самых частых сценариев: сайт работал на старой версии, после переключения PHP появляется пустая страница или 500. Быстрый способ вернуть доступ — временно выбрать предыдущую рабочую версию PHP в панели, а затем отдельно искать несовместимость.
После восстановления сравните:
- версию PHP и SAPI;
- набор модулей
php -m; - memory_limit и другие ini-параметры;
- совместимость CMS и дополнений;
- Composer platform requirements, если проект использует Composer;
- фатальные ошибки в журнале сразу после загрузки проблемной страницы.
Не оставляйте старую версию PHP навсегда только потому, что она «заработала». Откат — это способ быстро восстановить сервис и получить время на исправление несовместимого кода.
PHP после обновления: сравнить окружение
php -v
php --ini
php -m
php -r 'echo "memory_limit=".ini_get("memory_limit").PHP_EOL;'
php -r 'echo "error_log=".ini_get("error_log").PHP_EOL;'
# Если используется Composer
composer check-platform-reqs
composer diagnoseОтдельно для MODX Revolution
У MODX один из первых файлов, который стоит сохранить и открыть, — core/cache/logs/error.log. Там часто уже указаны класс, плагин, сниппет, файл или PHP-ошибка, из-за которой запрос оборвался.
- Сделайте копию последних строк
core/cache/logs/error.log. - Воспроизведите белый экран и снова посмотрите конец журнала.
- Если проблема появилась после установки Extra или правки плагина — проверяйте именно это изменение.
- Только после сохранения журнала очищайте кэш.
- Проверьте совместимость текущей версии PHP с MODX и используемыми дополнениями.
Если Manager MODX отдаёт 500, документация MODX также рекомендует проверить/пересоздать кэш. Но сначала сохраните журнал: он полезнее самого факта, что очистка кэша временно помогла.
MODX: журнал и кэш
# Посмотреть последние ошибки MODX
tail -n 120 /path/to/site/core/cache/logs/error.log
# Следить за журналом при обновлении проблемной страницы
tail -f /path/to/site/core/cache/logs/error.log
# Сначала сохраните error.log, и только потом очищайте кэш
cp /path/to/site/core/cache/logs/error.log \
/path/to/site/core/cache/logs/error-before-clear.log
# Очистка содержимого cache — выполняйте только если понимаете путь проекта
rm -rf /path/to/site/core/cache/*Отдельно для WordPress
В WordPress белая страница часто связана с fatal error плагина, темы или пользовательского кода. В современных версиях WordPress есть Recovery Mode, который может прислать администратору ссылку для входа и отключения проблемного компонента.
Если письма Recovery Mode нет, включайте запись отладки в файл, но не показывайте её посетителям. После воспроизведения ошибки смотрите wp-content/debug.log.
WordPress: записать ошибку в debug.log, но не показывать на сайте
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);Если белый экран появился после правки одного PHP-файла
Не загружайте файл на production повторно наугад. Сначала проверьте его синтаксис. Команда php -l не выполняет бизнес-логику файла, а только проверяет синтаксис.
Проверить синтаксис PHP-файла
php -l /path/to/file.php
# Найти PHP-файлы, изменённые за последние 2 дня
find /path/to/site -type f -name '*.php' -mtime -2 \
-printf '%TY-%Tm-%Td %TH:%TM %p\n' 2>/dev/null \
| sort -r | head -n 50Что не стоит делать при белом экране
- Не ставьте chmod 777 на весь сайт. Исправляйте владельца и права конкретного каталога.
- Не включайте display_errors надолго на production. Ошибки могут раскрыть пути, SQL и другие служебные данные.
- Не обновляйте одновременно CMS, PHP, плагины и тему. После этого невозможно быстро определить виновника.
- Не удаляйте логи до диагностики. Особенно перед очисткой кэша или восстановлением резервной копии.
- Не увеличивайте memory_limit вслепую. Сначала убедитесь, что в коде нет цикла или неконтролируемой выборки.
- Не переустанавливайте сайт поверх текущего состояния. Это может уничтожить полезные следы и усложнить восстановление.
Как убедиться, что сайт действительно исправлен
- проблемный URL отдаёт ожидаемый HTTP-код;
- страница отображается полностью и без PHP warning/fatal в свежем логе;
- открывается административная панель;
- работают формы, AJAX, авторизация, корзина и другие критичные сценарии;
- после очистки штатного кэша проблема не возвращается;
- при повторной проверке журнал не заполняется той же ошибкой.
Готовый набор диагностики для скачивания
Чтобы не копировать команды вручную, ниже приложены тестовые файлы. Пакет не исправляет сайт автоматически — он помогает быстро собрать факты и понять, на каком уровне находится проблема.
- white-screen-check.sh — проверяет Linux-сервер, HTTP, PHP, диск, inode, сервисы и стандартные логи;
- check-site.bat + check-site.ps1 — проверка URL с Windows: DNS, HTTP-код, время ответа;
- php-cli-diagnostics.php — безопасный CLI-отчёт по PHP и расширениям;
- user.ini.example — шаблон production-safe логирования PHP;
- ZIP — все файлы одним архивом.
Перед отправкой отчёта постороннему человеку просмотрите его. Error log может содержать внутренние пути, IP, параметры URL и другую служебную информацию.
Быстрые команды — можно просто скопировать
Если не нужен полный диагностический набор, используйте короткие команды ниже. Они не исправляют сайт автоматически, а помогают быстро найти уровень, на котором возникла ошибка.
Linux/VPS: HTTP, диск и последние ошибки
# Проверить HTTP-код
curl -sS -L -o /dev/null -w "HTTP=%{http_code} time=%{time_total}s\n" https://example.com/
# Проверить диск и inode
df -h
df -i
# Nginx
sudo tail -n 80 /var/log/nginx/error.log
# Apache на Ubuntu/Debian
sudo tail -n 80 /var/log/apache2/error.log
# PHP-FPM и web-сервер за последние 10 минут
sudo journalctl --since "-10 min" --no-pager | grep -Ei 'php|fpm|nginx|apache|fatal|error'PHP: безопасно писать ошибки в журнал
display_errors=Off
display_startup_errors=Off
log_errors=On
error_reporting=E_ALLMODX Revolution: посмотреть error.log
tail -n 120 /path/to/site/core/cache/logs/error.log
# Смотреть новые ошибки в момент обновления страницы
tail -f /path/to/site/core/cache/logs/error.logWordPress: записывать ошибки в debug.log
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);Скачать готовый набор диагностики
Какие программы действительно полезны при диагностике
- DevTools браузера — Network показывает HTTP-код и проблемные AJAX-запросы; Console помогает отделить frontend-ошибку от серверной.
- WinSCP — удобен для SFTP и безопасной замены/отката файлов на сервере.
- Windows Terminal / OpenSSH — SSH-доступ к VPS без отдельного тяжёлого клиента.
- curl — проверяет HTTP-код, редиректы и время ответа без браузера.
- journalctl / tail — позволяют видеть ошибку в момент её появления.
- php -l — обязательная быстрая проверка PHP-файла после ручной правки.
Специальная «программа для исправления белого экрана» обычно не нужна. Полезнее хороший журнал ошибок и возможность безопасно откатить одно конкретное изменение.
Какие изображения стоит добавить в эту статью
Для этой темы лучше использовать не декоративные картинки, а 3–4 практических изображения с подписями:
- DevTools → Network: пример запроса со статусом 500 и где смотреть код ответа.
- ISPmanager: где включён Error log и где открыть журнал сайта. Домены, IP и логины на скриншоте нужно скрыть.
- Терминал: пример
tail -f error.logс выделенной Fatal error. - Схема диагностики: браузер → Nginx/Apache → PHP-FPM → CMS → база данных, с пояснением, где искать лог на каждом этапе.
Alt-тексты должны описывать действие, а не повторять заголовок статьи: например «Ошибка 500 в Network DevTools при белом экране сайта» и «Просмотр PHP error log в ISPmanager».
Частые вопросы
Почему сайт белый, но HTTP-код 200?
Веб-сервер мог успешно вернуть ответ, а CMS или шаблон сформировали пустое содержимое. Проверяйте PHP log, журнал CMS, шаблонизатор и код конкретного маршрута.
Что делать, если белый экран появился сразу после обновления PHP?
Для быстрого восстановления временно верните предыдущую рабочую версию PHP, сохраните error log и затем исправляйте несовместимость. После этого можно повторить переход на новую версию.
Где смотреть ошибки на обычном хостинге?
В панели управления сайтом: error log домена и настройки PHP. В ISPmanager PHP-ошибки могут попадать в журнал сайта, а на сервере этот журнал обычно расположен в /var/www/httpd-logs/DOMAIN.error.log.
Нужно ли включать display_errors?
На рабочем сайте — нет. Лучше включить log_errors и читать журнал. display_errors используйте только в контролируемой тестовой среде.
Можно ли просто очистить кэш CMS?
Иногда это помогает, особенно при повреждённом кэше, но сначала сохраните error log. Иначе можно потерять информацию о реальной причине сбоя.
Почему после исправления белый экран возвращается?
Чаще всего устранён симптом, а не причина: несовместимый код продолжает выполняться, ресурс снова исчерпывается или фоновая задача повторяет ошибку. Сравните свежий лог с первоначальным.
Итог: белый экран нужно превращать в конкретную ошибку
Самое полезное действие при белом экране — не угадывать причину, а получить факты: HTTP-код, свежую строку error log и список последних изменений. После этого проблема обычно сводится к конкретному файлу, версии PHP, сервису, плагину, правам или ресурсу сервера.
Если вы обращаетесь к разработчику, приложите URL, точное время ошибки и диагностический отчёт из этой статьи. Это значительно сокращает этап «а у меня не воспроизводится» и помогает сразу перейти к исправлению.