Белый экран, error log и display_errors

Белый экран в PHP обычно означает не мистику, а ошибку, которую сейчас не показывают в браузере. На локальной машине ошибки полезно включить, а на production их нужно писать в log и не светить пользователям. В этом уроке разберем безопасный порядок диагностики: error_reporting, display_errors, error_log, синтаксис, версия PHP и типичные причины

Цель — перестать обновлять страницу вслепую

Быстрая локальная диагностика

В начале учебного index.php можно временно включить:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');

Теперь PHP будет показывать ошибки в браузере. Это удобно локально, но на публичном сайте так делать нельзя: ошибки могут раскрыть пути файлов, настройки и детали кода

Специально ломаем код

Создайте файл:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

echo 'Проверка'
echo 'Вторая строка';

Здесь пропущена точка с запятой после первой строки. PHP должен показать синтаксическую ошибку. Если вместо ошибки белая страница, значит отображение ошибок не включилось или запрос обрабатывает не тот PHP

error_log

На хостинге ошибки часто не показываются в браузере, но пишутся в log. Где именно лежит log, зависит от хостинга, панели управления, Docker-контейнера или сервера

Можно отправить свою запись:

error_log('Проверка записи в PHP error log');

Это помогает понять, куда пишет приложение и доходят ли сообщения до логов

В реальном проекте подробности ошибки лучше писать в log, а пользователю показывать спокойное сообщение

display_errors локально и на production

Локально:

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

Production:

display_errors = Off
log_errors = On

Идея простая: разработчик должен видеть ошибки, пользователь — нет. Пользователь должен получить понятную страницу ошибки, а детали должны уйти в журнал

Типичные причины белого экрана

Синтаксическая ошибка. Пропущена ;, скобка, кавычка, закрывающий блок

Fatal error. Вызвана несуществующая функция, класс не найден, подключаемый файл отсутствует

Неверная версия PHP. Код использует синтаксис новой версии, а сервер запускает старую

Ошибка подключения к базе. PDO бросает исключение, но оно не выводится

Проблема с autoload. vendor/autoload.php не найден после переноса проекта

Порядок проверки

  1. Убедитесь, что редактируете правильный файл.
  2. Включите ошибки локально.
  3. Проверьте синтаксис:
php -l index.php
  1. Проверьте версию:
php -v
  1. Проверьте error log.
  2. Если проект с Composer, выполните:
composer install
  1. Если ошибка на хостинге, сравните локальную и серверную версии PHP.

php -l

Команда:

php -l index.php

проверяет синтаксис файла без запуска всего приложения. Это быстрый способ поймать пропущенную скобку или точку с запятой

Для нескольких файлов понадобится отдельный инструмент или IDE, но для первого расследования php -l очень полезен

Частые ошибки

Call to undefined function. Функция не существует, расширение не включено или файл с функцией не подключен

Class not found. Не подключен autoload, неверный namespace или пакет не установлен

Failed opening required. Путь к файлу неправильный. Используйте __DIR__, чтобы строить путь от текущего файла

Cannot modify header information. Вы пытаетесь вызвать header, setcookie или session_start после вывода HTML

Что может быть еще интересно по этой теме

Нужно ли всегда включать E_ALL? На разработке да, это помогает видеть предупреждения заранее. На production ошибки нужно логировать

Почему на хостинге белый экран, а локально все работает? Часто отличается версия PHP, расширения, путь к файлам или настройки отображения ошибок

Можно ли показывать ошибку пользователю? Технические детали — нет. Лучше показать нейтральное сообщение, а подробности записать в log

Что делать в WordPress? Проверять WP_DEBUG, WP_DEBUG_LOG и логи хостинга, но не оставлять отладку включенной публично без контроля

Что открыть дальше

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x