Коди помилок в PHP, їх висновок і ловля на живця з допомогою недосипання

1

Від автора: я знову сьогодні не виспався! Вчора отлавливал помилки в написаному скрипті, а сьогодні комар дзижчав під вухом всю ніч. І здається, що це комаха кшталт того багу, який я минулої ночі ледве знайшов. Загалом, сьогодні (раз вже мені не спиться) дізнаємося про коди помилок в PHP.

Якщо їх не видно

Причин, чому помилки не виводяться на екрані може бути декілька:

Їх висновок відключений хостером спеціально – таким чином він піклується про підвищення безпеки свого серверного простору. У тому числі і вашого ресурсу. І все тому, що в описах деяких помилок відладчик виводить конфіденційну інформацію. Умілий хакер зможе легко використовувати її для злому вашого сайту. Наприклад, при вказівці неправильного пароля при підключенні до бази, розташованої на сервері MySQL. В результаті на екран виводиться опис помилки, що містить логін активного користувача СУБД.

У файлі .htaccess.

У налаштуваннях ядра мови.

Всі ці «приватні» випадки ми розглядали в одному з наших попередніх матеріалів. Але так як нами використовується Денвер, то я коротко опишу рішення даної проблеми в ньому.

Перед тим, як знайти помилку коді PHP, спочатку потрібно її вивести на екран. Якщо це не відбувається, тоді пряма дорога в php.ini.Тут потрібно активувати значення декількох параметрів:

display_errors.

error_reporting.

display_startup_errors.

Дані налаштування розташовані в розділі «Error handling and logging».

Коды ошибок в PHP

Логів немає!

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

У Денвері дана функція (за замовчуванням відключена. Це можна легко виправити, прописавши потрібний код в конфігураційному файлі (в тому ж розділі).

Знову відкрийте php.ini і внесіть до нього виділені нижче рядка. Точніше, одна з них вже повинна бути, але краще перевірити. З допомогою цих директив (log_errors і error_log) дозволяється запис повідомлень про помилки. А також задається шлях до файлу логів, за допомогою якого ви зможете здійснити PHP перевірку коду на помилки.

Коды ошибок в PHP

Після редагування конфігураційного файлу перезапустіть локальний сервер, щоб зміни вступили в силу.

Перевіряємо

Тепер перевіримо, що в нас вийшло. Для цього запустимо умисну синтаксичну неточність у коді: неправильно оголосимо змінну PHP.

@!$

Тепер заглянемо в створений файл логів.

Коды ошибок в PHP

Як бачимо, в нього записалася вся інформація про допущене ба. Тут же ми натикаємося на «згадка» про одного з основних типів помилок – parse error. Це говорить про те, що ми порушили синтаксичне правило мови (оголошення змінних).

Як можна ще перевірити PHP код на помилки? Застосувати функцію set_error_handler(), яка дозволяє задати власний обробник. Але її використання при включеному рідному handler не має сенсу. Крім цього користувач може перехоплювати не всі типи помилок. Наприклад, фатальні error вам (як і мені) змінити не вдасться. Приклад:

«.
«Опис: «.$str.»
«.
«Ім’я файлу: «.$file.»
«.
«Рядок коду: «.$line;
return true;
}
set_error_handler(‘user_handler’, E_ALL);
require(«nofile.php»);
?>

Коды ошибок в PHP

Спочатку ми відключили нативний обробник (error_reporting(0)). Потім створили власну функцію і передали її в якості аргументу set_error_handler(). Після чого ініціювали помилку, підключивши неіснуючий «в природі» файл.

Онлайн

Здійснити перевірку коду PHP на помилки можна також за допомогою спеціалізованих сервісів. Ось кілька з них: codepad, PHP Assist

А біля мене чомусь комарів стало більше! Або це зірочки літають? Піду, мабуть, посплю, поки до мене дичину серйозніше (білочка) не прискакала :) . Спокійної ночі!