стрілка вверх

обробка помилок, повідомлення про помилки

Error Reporting
Функція обробки повідомлень.

квітень 2016

Стаття за ресурсом php.net Error Reporting, Predefined Constants.


1. Функція error_reporting()

Функція error_reporting() — Встановлює директиву для інтерпритатора PHP, згідно якої створюється повідомлення про помилку в роботі PHP-скрипту.

Призначення error_reporting()

int error_reporting ([ int $level] )

Функція error_reporting() встановлює директиви error_reporting під час роботи php-скрипту. Інтерпритатор PHP має багато рівнів встановлення звіту про помилки. Використовуючи функцію error_reporting() ви можете встановити необхідний рівень звітування.

Якщо ж значення директив error_reporting не встановлені, то функція буде звітувати про помилки в тому об'ємі, що встановлений на сервері за замовчуванням.


Параметри

level

Рівень звітування про помилки error_reporting. Дозволяється встановлювати як Бітову Маску (Bitmask), так і Іменовані Константи (Named Constants) рівня помилок. Використання Іменованих Констант (Named Constants) наполегливо рекомендується, щоб забезпечити сумісність із наступними версіями PHP. За умови встановлення Маски та внесення нових рівнів звітування в наступних версіях PHP можлива не зовсім коректна робота обробника повідомлень.

Можливі рівні звітування про помилки Констант та їх значення описано дещо нижче за розділом Визначені Константи (Predefined Constants).


Зворотні значення функції error_reporting()

Функція повертає старе значення error_reporting або поточний рівень звітування, якщо ніякий інший level (рівень звітування) не встановлений.



Приклад #1 Застосування функції error_reporting()

<?php

// Відключаємо звітування про всі помилкові повідомлення
error_reporting(0);

// Звіт про деякі помилки
error_reporting( E_ERROR  E_WARNING  E_PARSE );

// Застосування повідомлень типу E_NOTICE також корисно 
// (вказує неініціалізовані змінні чи про помилку у назві змінної ...)
error_reporting (E_ERROR  E_WARNING  E_PARSE  E_NOTICE);

// Звітування про всі помилки, за виключенням E_NOTICE
error_reporting(E_ALL  & ~ E_NOTICE);

// Звіт про всі помилки 
error_reporting (E_ALL );

// Також звіт про всі помилки errors
error_reporting (-1);

// Аналогічно as error_reporting(E_ALL);
ini_set('error_reporting' E_ALL);

?>


Зважте! Вказуючи значення -1 функції error_reporting() виведе всі можливі помилки, навіть якщо в майбутніх версіях будуть додатково розширені рівні помилок та нові Іменовані Константи (Named Constants).



2. Короткий опис директив повідомлень про помилку

error_reporting integer

Встановлює рівень звітування про помилки виконання роботи php-скрипту.

Параметр може бути встановленим як числом, так і Іменованою Константою (Named Constants). Рівні звітування про помилку та Константи описані в розділі Визначені Константи.

Корисним буде переглянути директиву display_errors.

Зважте! Включення рівня звітування E_NOTICE під час розробки веб-проекту може бути корисним. Під час налагодження NOTICE повідомлення попередять вас про можливі неточності вашого коду.

Наприклад, E_NOTICE проінформує про використання неініціалізованих змінних, це корисно для пошуку випадкових помилок в назві змінної і таким чином зекономить деякий час розробнику.

NOTICE повідомлення можуть попередити вас про "поганий" стиль коду. Наприклад, $arr[item] краще написати як $arr['item'] так як PHP розуміє "item" як константу. І якщо це не константа, то PHP сприймає це за рядок масиву.



Зважте! Розпочинаючи з версії PHP 5.4.0 внесений рівень помилки E_STRICT.

E_STRICT пропонують поради, щодо покращення функціональної сумістності вашого коду.



display_errors string

В налаштуваннях php.ini встановлено значення display_errors, що вказує яким чином виводити повідомлення про помилку: на екран або приховати від користувача.

За замовчуваннямdisplay_errors встановлено "On".

Наприклад

<?php
// Дізнатись в якому положенні директива display_errors
echo 'display_errors = '. ini_get('display_errors');

// Відключити виведення повідомлень на екран
// відвідувача із міркувань безпеки
ini_set('display_errors', '0');
echo 'display_errors = '. ini_get('display_errors');

?>



3. Визначені Константи (Predefined Constants)

Константи, подані нижче, завжди доступні як частина PHP ядра.

Майте на увазі: Ви можете застосовувати назви констант в php.ini але не поза PHP, на зразок, httpd.conf де варто застосовувати значення маски.



Помилки та Протоколи

Значення

Константа

Опис

Примітка

1

E_ERROR (integer)

Фатальна помилка. Вказує на помилку, що неможе бути вирішена засобами самого php-скрипту. Виконання php-скрипту припиняється.

 
2

E_WARNING (integer)

Попередження. Виконання скрипту не припиняється.

 
4

E_PARSE (integer)

Помилка компілювання. Помилки такого типу повинні створюватись лише компіляторами.

 
8

E_NOTICE (integer)

Повідомлення. Вказує, що скрипт виконує певні операції, які можуть вважатись при певних обставинах за помилку, хоча такі операції можуть бути звичайним виконанням роботи php-скрипту.

 
16

E_CORE_ERROR (integer)

Фатальна помилка, що трапилась під час ініціалізації PHP. Така помилка схожа до E_ERROR, за виключенням того, що створюється ядром PHP.

 
32

E_CORE_WARNING (integer)

Попередження. Попереджує, що виникла під час ініціалізації PHP. Така помилка схожа до E_WARNING, за виключенням того, що створюється ядром PHP.

 
64

E_COMPILE_ERROR (integer)

Фатальна помилка компіляції скрипту. Помилка подібна до E_ERROR, формується механізмом Zend Scripting Engine.

 
128

E_COMPILE_WARNING (integer)

Попередження компіляції. Подібна до E_WARNING, формується механізмом Zend Scripting Engine.

 
256

E_USER_ERROR (integer)

Помилки, що створені користувачем. Подібна до E_ERROR, за виключенням того, що вони генерується кодом php-функції trigger_error().

 
512

E_USER_WARNING (integer)

Попередження, що створене користувачем. Подібне до E_WARNING, за виключенням того, що генерується кодом php-функції trigger_error().

 
1024

E_USER_NOTICE (integer)

Повідомлення, що генерується користувачем. Подібне до E_NOTICE, за виключенням того, що генерується кодом php-функції trigger_error().

2048

E_STRICT (integer)

Підказка PHP.Застосовується, щоб PHP запропонував зміни у вашому коді, що найкраще будуть відповідатиме роботі коду скрипту.

Розпочинаючи з версії PHP 5 проте не включена в E_ALL до версії PHP 5.4.0

4096

E_RECOVERABLE_ERROR (integer)

Фатальні помилки із можливістью обробки. Вказує, що сталась суттєва помилка, проте механізм обробки php-скрипту працює. Якщо помилка не обробляється функцією set_error_handler, то виконання роботи скрипту припиняється.

Розпочинаючи із версії PHP 5.2.0

8192

E_DEPRECATED (integer)

Повідомлення. Вказує, що в майбутніх версіях код скрипту працювати не буде.

Розпочинаючи з версії PHP 5.3.0

16384

E_USER_DEPRECATED (integer)

Повідомлення, що генерується за ініціативи користувача. Схоже до E_DEPRECATED, за виключенням того, що генерується кодом php-функції trigger_error().

Розпочинаючи з версії PHP 5.3.0

32767

E_ALL (integer)

Всі помилки та попередження.

32767 в PHP 5.4.x,
30719 в PHP 5.3.x,
6143 в PHP 5.2.x,
2047 в попередніх версіях



Вказані в таблиці значення (як числові так і символьні) застосовуються для побудови маски, яка вказує про які повідомлення необхідно звітувати. Щоб вказувати декілька видів помилок дозволяється застосовувати комбінацію логічних операторів '|', '~', '!', '^' and '&'



4. Рекомендації програмістів

Якщо ви бачите чисту сторінку без повідомлення про помилку роботи скрипту та ви не маєте доступу до налаштувань серверу на зразок php.ini, спробуйте виконати ось таку операцію:
- створіть новий файл в який вложіть скрипт, що видає помилку:



<?php
error_reporting
( E_ALL);
ini_set ("display_errors", 1);
include(
"file_with_errors.php" );
?>

- виконайте цей файл замість файлу із помилкою
- тепер повинен з'явитись звіт про помилку

Сподіваюсь цей приклад допоможе вам вирішити проблему.