В сьогоднішньому теоретичному уроці ми розглянемо складне та важливе питання в PHP — виявлення та усвідомлення помилок. Оскільки при створенні та програмуванні скриптів та/або веб-застосунків існує велика вірогідність появи помилок, не зайвим буде знати коди (константи) помилок та їх опис. Ці можливі помилки будуть наведені для вашої зручності в табличному вигляді. Після ознайомлення із даним уроком ви будете краще розуміти запис у логах виду:
[ERROR]: [8][E_NOTICE] [Undefined variable: variable][script.php:1]
Подібний синтаксис повідомлення про помилку ви знайдете у файлах логів. А в браузері повідомлення про помилку будуть дещо схожими: будуть включати назву файлу, номер рядка та короткий опис помилки.
Оскільки 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 означає: всі помилки і не сповіщення. Знак & — це логічний оператор І (ТА), а знак | — це логічний оператор АБО. Нижче в таблиці ви зможете побачити основні типи помилок та їх опис і позначення.
| Значення | Константа (код помилки) | Короткий опис | Чи є можливість перехопити? |
| 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.
На сьогодні все, дякую за увагу!
Іспанська мова приваблює мільйони людей своєю мелодійністю, емоційністю та відносною простотою вивчення. Одним із найважливіших…
Коли проєкт залежить від чужих обмежень, зростають ризики простоїв, втрати доступу до даних і складнощів…
У тих, хто планує створення сайту вперше, майже завжди виникає питання: що таке домен і…
Для простого користувача критерієм хорошого Wi-Fi є швидке завантаження сторінок та відсутність буферизації під час…
Коли власник стоматологічної клініки вперше замислюється про автоматизацію, він нерідко іде найпростішим шляхом: гуглить "CRM…
Алоха! Останні кілька років остаточно закріпили тренд на віддалену роботу. Для веб-розробників, DevOps-інженерів та адміністраторів…