PHP на сервере Linux, PHP-FPM (версия уточняется)

PHP на сервере: PHP-скрипт выдаёт белую страницу вместо сообщения об ошибке

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Белая страница PHP вместо текста ошибки часто означает HTTP 500 при отключённом показе ошибок посетителям, но может возникать также из-за пустого ответа, некорректного вывода либо ошибки до выполнения сценария. На рабочем сервере безопаснее читать журнал, а не включать display_errors на весь сайт.

В этой статье
  1. Что происходит и когда применима инструкция
  2. Причины и диагностические признаки
  3. Подробная пошаговая инструкция
  4. Как проверить, что проблема исправлена
  5. Если не помогло — дальнейшая диагностика и откат

#Что происходит и когда применима инструкция

Белая страница 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 в журнале отсутствует.Проверить ветку маршрутизации и обработчик.

#Подробная пошаговая инструкция

  1. Определите код ответа браузераОткройте нужную страницу, нажмите F12 → «Сеть», перезагрузите и выберите основной запрос типа «Документ». Посмотрите статус HTTP, Location при перенаправлении, размер ответа и время. Если 500 — начните с PHP, если 502/504 — с FPM и прокси; если 200 — приложение могло вернуть пустое тело.
  1. Прочитайте журнал за точное время запросаЧерез панель хостинга откройте «Журнал ошибок» сайта. На выделенном Linux-сервере проверьте журнал PHP-FPM и Apache/Nginx, сверьте домен и минуту ошибки. Не публикуйте весь журнал с именами пользователей, токенами или путями.
  2. SSH, права администратора, пример systemd + PHP 8.2
    Linux · Терминал (Bash)КомандаНужен sudo
    SSH, права администратора, пример systemd + PHP 8.2. При отдельном error_log приложения проверяйте именно его.
    sudo journalctl -u php8.2-fpm --since "15 minutes ago" --no-pager | tail -n 100
  1. Проверьте, не содержит ли файл синтаксической ошибкиЕсли журнал указывает на конкретный PHP-файл, проверьте его анализатором той версии PHP, которая выполняет приложение. Тест -l проверяет синтаксис одного файла и не запускает его. При несовпадении версий CLI и FPM выберите нужный бинарник.
  2. SSH, только проверка синтаксиса; замените путь и версию на свои
    Linux · Терминал (Bash)Команда
    SSH, только проверка синтаксиса; замените путь и версию на свои. Ожидается «No syntax errors detected». Команда не проверяет подключённые файлы и ошибки выполнения.
    php -l /var/www/example/public/index.php
  1. Отделите ошибку приложения от ошибки инфраструктурыЕсли журнал показывает Uncaught Error/Exception, выпишите тип исключения, файл и строку. При пропавшем расширении проверьте extension_loaded в веб-контексте, при permission denied — владельца каталога, при Allowed memory size — потребление памяти. Не включайте display_errors=On на боевом сайте, поскольку оно раскрывает пути и секреты.
  1. Исправьте первопричину в тестовой копииСохраните изменяемые файлы и данные. Внесите минимальную правку исходного PHP-кода либо настройку расширения согласно записи журнала; сначала проверьте в отдельной среде. После выкладки повторите запрос в приватном окне с отключённым кэшем, не меняя одновременно несколько причин.
  1. Если журнал пуст, временно включите безопасную записьВ конфигурации реального пула PHP задайте log_errors=On, display_errors=Off и доступный error_log с ограниченными правами. Настройку php.ini/пула применяйте после проверки синтаксиса в согласованное окно. В конце удалите диагностические файлы и не оставляйте публичный phpinfo.
  2. Локальный терминал с 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-журнал приложения может быть пустым.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.