Як відбувається виведення помилок PHP та інших програмних багів

29

Від автора: вітаю вас, дорогі читачі…. Звідки шишка на лобі? Це я вчора граблі знайшов на дачі, які втратив у минулому році. Загалом, все банально: сам забув – сам наступив. Добре, що висновок помилок PHP відбувається не за допомогою граблів. Хоча на цьому теж можна набити чудові «шишки»!

Якщо помилки не видно?

Якщо при виконанні коду у вас не відображаються ні попередження (warning), ні помилки (errors), ні виключення (exception), то значить ви талановитий розробник. Але за умови, що написані вами програми працюють. Хоча може бути й інша причина, чому все йде так гладко – ви забули включити помилки PHP. Точніше, їх висновок. Це можна зробити кількома способами:

В налаштуваннях веб-сервера Apache (файл .htaccess).

У налаштуваннях мови (php.ini).

Безпосередньо в коді.

Слід зазначити, що хостери надають віртуальний простір, часто відключають висновок помилок. Це робиться для забезпечення безпеки ресурсів, розміщених на даному майданчику. Тому вам пощастило, якщо до вашого сайту підключений Apache. Тоді можна, прописавши кілька рядків, активувати відображення всіх errors і warning. Для цього зайдіть в .htaccess (якщо немає, то створюємо) і прописуємо наступні рядки:

php_flag display_errors on
php_value error_reporting -1

В PHP, щоб включити висновок помилок використовуються дві директиви:

display_errors – включає або відключає відображення повідомлень про помилки.

error_reporting – встановлює, які саме «баги» слід виводити. Задається числом або константою.

Більше інформації за прийнятими значеннями констант можна «запозичити» з технічної документації до мови. Благо, PHP добре описаний.

А як же Денвер?

Не хвилюйтеся, я не забув про нього. В «наборі для джентльменів» включення відображення «багів» налаштовується в php.ini. Він є головним засобом конфігурації мови в цьому та інших подібних програмних наборах.

Спасибі творцям Denwer! Вони продумали все правильно, і тому заздалегідь активували всі основні (необхідні) параметри. В тому числі і «трансляцію» повідомлень про помилки в програмному коді.

На наступному знімку позначені параметри та їх значення, які повинні бути прописані в файлі конфігурації мови, щоб включити відображення помилок PHP.

Явна активація

Якщо не впевнені, що хостер включив відображення «багів». Чи потрібно «перекрити» параметри, задані в конфігураційних файлах, тоді використовуйте явну активацію в коді скрипта.

Для цього використовується все ті ж директиви error_reporting і display_errors. Але в програмному коді PHP висновок помилок на екрані задається за допомогою спеціальної функції ini_set(). Вона служить для зміни значень параметрів (змінних і директив), заданих у файлі php.ini. Приклад використання:

ini_set(‘display_errors’, 1);

Таким же чином визначається і значення display_errors.Крім цього для даної директиви у PHP існує спеціальна однойменна функція. В якості вхідних параметрів вона приймає перерахування типів помилок, які потрібно виводити на екран при виконанні коду скрипта.

З допомогою даної функції в php, ini типи виведених помилок задаються кількома способами. Але найлегше (і більш зрозуміло за змістом) використовувати передвстановлені (інтегровані в ядро мови) константи.

Наприклад, активуємо відображення помилок, допущених в іменах чи не проинициализированных в програмному коді змінних:

error_reporting(E_NOTICE);

Виведення повідомлень про всіх типах «багів»:

error_reporting(E_ALL);

Також в PHP можна відключити виведення помилок. Наприклад:

error_reporting(0);

Також можна заборонити відображення помилок для конкретної рядки коду. Для цього використовується «собака». Точніше символ «@». Приклад:

$v = @$var[$n];

Трохи попрактикуємось

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

Створимо майже нескінченний цикл. Він буде «крутиться» дуже довго, і час очікування виконання коду перевищить встановлений у налаштуваннях ліміт – півхвилини:

В результаті ми отримуємо повідомлення про фатальну помилку типу «шеф, все пропало» :) .

Тепер відключимо відображення всіх програмних «нерівностей». Зверху попереднього коду додайте рядок:

error_reporting(0);

В результаті ми не отримали повідомлення про помилку, але припинення програми все одно відбулося. Тому ми і отримали порожній екран.

Сьогодні ми навчилися включати помилки в PHP htaccess і іншими способами, з допомогою яких ви зможете розглянути в коді всі «забуті граблі».