Типы ошибок PHP и их отчётность
Разберитесь в уведомлениях, предупреждениях и критических ошибках, а также в уровнях error_reporting
«Типы ошибок 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_logerror_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 — локальная установка не требуется.
Все уроки этого курса
- Типы ошибок PHP и их отчётность
- Try, Catch и Finally
- Создание пользовательских исключений
- Журналирование ошибок и лучшие практики