PHP Academy · Урок

Типы ошибок PHP и их отчётность

Разберитесь в уведомлениях, предупреждениях и критических ошибках, а также в уровнях error_reporting

Урок 1 из 413 шагов

«Типы ошибок PHP и их отчётность» — бесплатный урок PHP Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Типы ошибок PHP

В PHP есть несколько уровней серьёзности ошибок:

  • Уведомление — незначительная проблема, выполнение продолжается
  • Предупреждение — некритичная проблема, выполнение продолжается
  • Критическая ошибка — выполнение немедленно прекращается
  • Ошибка разбора — синтаксическая ошибка, выполнение не начинается
  • Устаревшая возможность — функция будет удалена

error_reporting()

Управляйте ошибками, о которых сообщает PHP, с помощью error_reporting():

<?php
// Show all errors (development)
error_reporting(E_ALL);

// Hide notices and deprecated
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);

// Production: no display, log to file
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');

display_errors и log_errors

Основные настройки php.ini для обработки ошибок:

  • display_errors = On — показывать ошибки в браузере (только при разработке)
  • display_errors = Off — скрывать ошибки от пользователей (в рабочей среде)
  • log_errors = On — записывать ошибки в файл error_log
  • error_log = /path/to/file — указывать расположение журнала

Никогда не показывайте ошибки пользователям в рабочей среде!

Вызов ошибок с помощью trigger_error

Создавайте собственные ошибки PHP с помощью trigger_error():

<?php
function divide(int $a, int $b): float {
    if ($b === 0) {
        trigger_error('Division by zero', E_USER_WARNING);
        return 0.0;
    }
    return $a / $b;
}

echo divide(10, 0);  // triggers E_USER_WARNING

Собственный обработчик ошибок

Зарегистрируйте собственный обработчик ошибок с помощью set_error_handler():

<?php
set_error_handler(function(int $errno, string $errstr, string $file, int $line): bool {
    $message = "[$errno] $errstr in $file:$line";
    error_log($message);
    if ($errno === E_USER_ERROR) {
        http_response_code(500);
        die('Internal error — please try again later');
    }
    return true;  // don't execute PHP internal error handler
});

trigger_error('Custom error message', E_USER_ERROR);

Распространённые источники ошибок

Типичные причины ошибок PHP:

  • Обращение к неопределённому ключу массива → уведомление
  • Вызов функции, которая возвращает false, с последующим использованием результата → предупреждение
  • Вызов неопределённой функции → критическая ошибка
  • Пропущенная точка с запятой → ошибка разбора
  • Деление на ноль → предупреждение (возвращает INF или NAN)

Оператор подавления ошибок @

Оператор @ подавляет ошибки одного выражения — избегайте его и используйте правильную обработку ошибок:

<?php
// Bad: hides errors silently
$result = @file_get_contents('missing.txt');

// Good: check explicitly
$result = file_get_contents('missing.txt');
if ($result === false) {
    // handle the error
    echo 'File not found';
}

JIT в PHP 8 и изменения обработки ошибок

В PHP 8 обработка некоторых ошибок стала более строгой:

  • Многие предупреждения были преобразованы в TypeError/ValueError
  • str_contains/starts_with/ends_with заменяют регулярные выражения для простых проверок
  • Передача аргументов неправильных типов по умолчанию вызывает TypeError

ini_set во время выполнения

Переопределяйте настройки php.ini во время выполнения:

<?php
// Display errors during development
if (getenv('APP_ENV') === 'development') {
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);
} else {
    ini_set('display_errors', '0');
    ini_set('log_errors', '1');
    error_reporting(E_ALL);
}

Проверка уровня ошибки

Определяйте уровни ошибок с помощью побитового AND:

<?php
$level = error_reporting();

if ($level & E_NOTICE) {
    echo 'Notices are reported';
}
if ($level & E_WARNING) {
    echo 'Warnings are reported';
}

// Check specific error types
echo (E_ALL & E_NOTICE) ? 'E_ALL includes E_NOTICE' : 'no';

Лучшие практики ведения журнала ошибок

Полезные привычки при ведении журнала ошибок:

  • Всегда записывайте ошибки в рабочей среде
  • Добавляйте контекст: идентификатор пользователя, URL запроса, временную метку
  • Используйте структурированное журналирование (JSON) для упрощения разбора
  • Ротируйте файлы журналов, чтобы не допустить заполнения диска
  • Отслеживайте журналы с помощью таких инструментов, как ELK, Datadog или Papertrail

Быстрая проверка

Какой тип ошибки PHP немедленно прекращает выполнение?

Итоги: отчёт об ошибках PHP

Основы обработки ошибок:

  • Типы ошибок: уведомление, предупреждение, критическая ошибка, ошибка разбора, устаревшая конструкция
  • Устанавливайте уровень с помощью error_reporting()
  • В рабочей среде отключайте отображение и включайте журналирование
  • Регистрируйте собственный обработчик с помощью set_error_handler()
  • Никогда не подавляйте ошибки оператором @ в рабочем коде
Можно начать бесплатно

Изучай PHP с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
49
Уроки
195

Часто задаваемые вопросы

Урок «Типы ошибок PHP и их отчётность» бесплатный?

Да — полный текст урока «Типы ошибок PHP и их отчётность» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Типы ошибок PHP и их отчётность»?

Разберитесь в уведомлениях, предупреждениях и критических ошибках, а также в уровнях error_reporting Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Типы ошибок PHP и их отчётность»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Типы ошибок PHP и их отчётность
  2. Try, Catch и Finally
  3. Создание пользовательских исключений
  4. Журналирование ошибок и лучшие практики
← Назад к PHP Academy