Уроки PHP — Обробка помилок (можливі типи помилок)

В сьогоднішньому теоретичному уроці ми розглянемо складне та важливе питання в PHP — виявлення та усвідомлення помилок. Оскільки при створенні та програмуванні скриптів та/або веб-застосунків існує велика вірогідність появи помилок, не зайвим буде знати коди (константи) помилок та їх опис. Ці можливі помилки будуть наведені для вашої зручності в табличному вигляді. Після ознайомлення із даним уроком ви будете краще розуміти запис у логах виду:

[ERROR]: [8][E_NOTICE] [Undefined variable: variable][script.php:1]

Подібний синтаксис повідомлення про помилку ви знайдете у файлах логів. А в браузері повідомлення про помилку будуть дещо схожими: будуть включати назву файлу, номер рядка та короткий опис помилки.

 

Налаштування рівня повідомлень про помилки в PHP

Оскільки PHP має багато рівнів помилок, для їх визначення потрібно використовувати функцію error_reporting(), яка визначає, про які помилки вам буде повідомлено. Її можна використовувати у конфігураційному файлі php.ini або ж безпосередньо у файлі поточного скрипта. Нижче показано деякі варіанти налаштування цієї функції:

<?php
error_reporting(E_ALL); // включити повідомлення про ВСІ помилки
ini_set("error_reporting", E_ALL); // інший спосіб включити повідомлення про ВСІ помилки
error_reporting(E_ERROR | E_PARSE); // включити повідомлення тільки про серйозні помилки
error_reporting(E_ALL & ~E_NOTICE); // включити ВСІ повідомлення, окрім сповіщень
error_reporting(0); // відключити повідомлення про помилки
?>

Деякі пояснення цього запису:

З кожною згенерованою помилкою PHP пов’язується певний тип. Наприклад, тип помилки E_NOTICE — це не критична помилка часу виконання, або ж потенційна помилка. Щоб виключити її показ функцією error_reporting() використовується логічний оператор НЕ знаком ~ (тильда) (наприклад ~E_NOTICE). Тобто, запис за замовчуванням E_ALL & ~E_NOTICE означає: всі помилки і не сповіщення.  Знак & — це логічний оператор І (ТА), а знак | — це логічний оператор АБО. Нижче в таблиці ви зможете побачити основні типи помилок та їх опис і позначення.

 

Типи помилок в PHP та їх короткий опис

Значення Константа (код помилки) Короткий опис Чи є можливість перехопити?
1 E_ERROR Фатальні помилки часу виконання. Непереборна помилка. Виконання скрипту припиняється Ні
2 E_WARNING Не фатальні (виправні) помилки. Виконання скрипту не припиняється Так
4 E_PARSE Помилка парсеру на етапі компіляції. Повинні генеруватися лише парсером Ні
8 E_NOTICE Потенційна помилка. Повідомлення часу виконання. Вказують на те, що сталося щось, що може вказувати на помилку Так
16 E_CORE_ERROR Аналогічно помилці E_ERROR, але генерується ядром PHP Ні
32 E_CORE_WARNING Попередження (не фатальні помилки), — аналогічно E_WARNING, але генерується ядром PHP Ні
64 E_COMPILE_ERROR Фатальні помилки на етапі компіляції, — аналогічно E_ERROR, але генерується двигуном Zend Engine Ні
128 E_COMPILE_WARNING Попередження на етапі компіляції (не фатальні помилки), — аналогічно E_WARNING, але генерується двигуном Zend Engine Ні
256 E_USER_ERROR Повідомлення про помилки, згенеровані користувачем, — аналогічно E_ERROR, але ініціюється викликом функції trigger_error() Так
512 E_USER_WARNING Попередження, згенеровані користувачем, — аналогічно E_WARNING, але ініціюється викликом функції trigger_error() Так
1024 E_USER_NOTICE Повідомлення, згенеровані користувачем, — аналогічно E_NOTICE, але ініціюється викликом trigger_error() Так
2048 E_STRICT Повідомлення від виконавчого середовища з рекомендаціями щодо покращення якості коду, що дозволить забезпечити кращу взаємодію та сумісність коду
4096 E_RECOVERABLE_ERROR Небезпечна, але не фатальна помилка (наприклад, невідповідність типу). Такі помилки вказують, що, ймовірно, виникла небезпечна ситуація, але обробка скриптів стабільна. Якщо помилка не обробляється функцією, виконання програми переривається Так
8192 E_DEPRECATED Попередження про використання застарілої функції чи конструкції. Включається для того, щоб ви були попереджені про код, який не буде працювати у майбутніх версіях PHP Так
16384 E_USER_DEPRECATED Попередження про використання застарілої функції або конструкції, ініційоване в коді скрипта користувачем, за допомогою функції PHP trigger_error() Так
32767 E_ALL Усі підтримувані помилки, попередження та зауваження Ні

 

 

Стандартним обробником помилок для PHP є вбудований обробник. Але ви можете змінити обробник помилок, щоб використовувати свій спеціальний обробник помилок з допомогою функції set_error_handler(). Ті помилки, які позначені в таблиці як такі, які можна перехопити, можуть оброблюватись вашою кастомною функцією обробки помилок. Інші ж помилки більш складні та серйозні і повинні вирішуватись PHP.

 

На сьогодні все, дякую за увагу!

 

Recent Posts

Як зробити так, щоб ваш сайт показувався у блоці відповідей Google

Основний трафік на сайт з пошукових систем йде саме з органічної видачі. І тут дуже…

21 годину ago

Як програмісту самовдосконалитись та змінити себе на краще

Зміни — це щось таке, що завжди лякає і рідко буває простим та легким. Тим…

6 днів ago

Як додати свій текстовий блок перед формою коментарів у WordPress

Блок коментування у сайтах на системі CMS WordPress можна віднести до одних із найважливіших частин…

1 тиждень ago

Я знайшов ідеальний подарунок для сестри на 8 березня: історія мого пошуку

Привіт, мене звати Олег, і я хочу поділитися з вами своєю історією про те, як…

1 тиждень ago

Стильні квадратні годинники для чоловіків на кожен день

Корпус у вигляді квадрата – це не лише данина класиці, а й сучасний акцент у…

1 тиждень ago

Білл Гейтс

Люди завжди переоцінюють зміни за тиждень, і недооцінюють можливі досягнення за рік Білл Гейтс  

2 тижні ago