#Что происходит и когда применима инструкция
Белая страница PHP вместо текста ошибки часто означает HTTP 500 при отключённом показе ошибок посетителям, но может возникать также из-за пустого ответа, некорректного вывода либо ошибки до выполнения сценария. На рабочем сервере безопаснее читать журнал, а не включать display_errors на весь сайт.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Фатальная ошибка или исключениеФатальная ошибка или исключение. HTTP 500, в error_log запись Fatal error / Uncaught. | HTTP 500, в error_log запись Fatal error / Uncaught. | Найти файл и строку и исправить несовместимость. |
| Запрос обрывается в FPM или проксиЗапрос обрывается в FPM или прокси. HTTP 502/504, php-скрипт до выполнения не доходит. | HTTP 502/504, php-скрипт до выполнения не доходит. | Проверить лог веб-сервера и PHP-FPM. |
| Приложение отправляет пустой ответПриложение отправляет пустой ответ. HTTP 200 с нулевой длиной либо redirect, ошибка PHP в журнале отсутствует. | HTTP 200 с нулевой длиной либо redirect, ошибка PHP в журнале отсутствует. | Проверить ветку маршрутизации и обработчик. |
#Подробная пошаговая инструкция
- Определите код ответа браузераОткройте нужную страницу, нажмите F12 → «Сеть», перезагрузите и выберите основной запрос типа «Документ». Посмотрите статус HTTP, Location при перенаправлении, размер ответа и время. Если 500 — начните с PHP, если 502/504 — с FPM и прокси; если 200 — приложение могло вернуть пустое тело.
- Прочитайте журнал за точное время запросаЧерез панель хостинга откройте «Журнал ошибок» сайта. На выделенном Linux-сервере проверьте журнал PHP-FPM и Apache/Nginx, сверьте домен и минуту ошибки. Не публикуйте весь журнал с именами пользователей, токенами или путями.
- SSH, права администратора, пример systemd + PHP 8.2Linux · Терминал (Bash)КомандаНужен sudoSSH, права администратора, пример systemd + PHP 8.2. При отдельном error_log приложения проверяйте именно его.
sudo journalctl -u php8.2-fpm --since "15 minutes ago" --no-pager | tail -n 100
- Проверьте, не содержит ли файл синтаксической ошибкиЕсли журнал указывает на конкретный PHP-файл, проверьте его анализатором той версии PHP, которая выполняет приложение. Тест -l проверяет синтаксис одного файла и не запускает его. При несовпадении версий CLI и FPM выберите нужный бинарник.
- SSH, только проверка синтаксиса; замените путь и версию на своиLinux · Терминал (Bash)КомандаSSH, только проверка синтаксиса; замените путь и версию на свои. Ожидается «No syntax errors detected». Команда не проверяет подключённые файлы и ошибки выполнения.
php -l /var/www/example/public/index.php
- Отделите ошибку приложения от ошибки инфраструктурыЕсли журнал показывает Uncaught Error/Exception, выпишите тип исключения, файл и строку. При пропавшем расширении проверьте extension_loaded в веб-контексте, при permission denied — владельца каталога, при Allowed memory size — потребление памяти. Не включайте display_errors=On на боевом сайте, поскольку оно раскрывает пути и секреты.
- Исправьте первопричину в тестовой копииСохраните изменяемые файлы и данные. Внесите минимальную правку исходного PHP-кода либо настройку расширения согласно записи журнала; сначала проверьте в отдельной среде. После выкладки повторите запрос в приватном окне с отключённым кэшем, не меняя одновременно несколько причин.
- Если журнал пуст, временно включите безопасную записьВ конфигурации реального пула PHP задайте log_errors=On, display_errors=Off и доступный error_log с ограниченными правами. Настройку php.ini/пула применяйте после проверки синтаксиса в согласованное окно. В конце удалите диагностические файлы и не оставляйте публичный phpinfo.
- Локальный терминал с curl; замените пример своим URL без секретных параметровLinux · Терминал (Bash)КомандаЛокальный терминал с curl; замените пример своим URL без секретных параметров. Нужен ожидаемый код HTTP без большой задержки, сообщение об ошибке читается в журнале.
curl -sS -o /dev/null -w "HTTP=%{http_code} TIME=%{time_total}" https://example.com/problem
#Как проверить, что проблема исправлена
Страница отдаёт ожидаемый ответ, код HTTP 200 либо штатный код редиректа, в журнале не повторяется фатальная ошибка.
#Если не помогло — дальнейшая диагностика и откат
Если код 200, но тело остаётся пустым, проверьте шаблон, early return, output buffering и маршрутизацию. Если 502/504, прежде устраните отказ FPM/прокси — PHP-журнал приложения может быть пустым.