В сьогоднішньому теоретичному уроці ми розглянемо складне та важливе питання в 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.
На сьогодні все, дякую за увагу!
Навчання за кордоном вже давно асоціюється з якісною освітою, новими можливостями та безліччю перспектив. Але…
Вибір майстра для ремонту та перетяжки меблів – завдання, яке потребує вдумливого підходу. Адже від…
Вибір ідеального хостингу під свій сайт може бути досить заплутаною справою, особливо коли існує багато…
Щоб уникати помилок, потрібно набиратися досвіду; щоб набиратися досвіду, потрібно робити помилки Лоуренс Пітер
Коротке визначення Чорного SEO Чорне СЕО (або Чорна оптимізація) — це будь-яка практика, метою якої…
Отримання прав водія категорії C відкриває двері до професійної діяльності, пов'язаної з керуванням вантажними автомобілями.…