Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 16.07.2024)
561400
осіб
361
літаків
326
гелікоптерів
8227
танків
15862
ББМ
15368
артилерія
892
ППО
1119
РСЗВ
20680
машин
28
кораблі і катери
Уроки PHP — Обробка помилок (можливі типи помилок)
Опубліковано

Уроки 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.

 

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

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *