Грешка при обработка на PHP

Грешка при обработка на PHP

Грешка Работа с trigger_error () и set_error_handler ()

PHP предоставя отлична възможност да наблюдават някакви грешки. Тук ние ще говорим за това как да се справят с грешка - доклад (или доклад) за инцидента на потребителя, ако е необходимо - да информира администратора чрез електронна поща, запишете информацията за инцидента в лог-файла.

Така че, на първо място, нека да се дефинира какво грешката в PHP.

PHP поддържа следните нива за грешки:

E_ERROR
E_WARNING
E_PARSE
E_NOTICE
E_CORE_ERROR
E_CORE_WARNING
E_COMPILE_ERROR
E_COMPILE_WARNING
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE
E_ALL
E_STRICT

В действителност - това е просто една константа, която се използва за да се определи нивото на обработка на грешки, изграждане на малко-маска. Константи са "говорещи" имена. С поглед към константа - можем да кажем, че грешка ниво E_PARSE се случва в случай на синтактична грешка, E_NOTICE - това е напомняне за програмист за нарушение "добър стил" програмиране в PHP.

Когато съединението с база MySQL база данни (или друга) не успее - преводач PHP информира грешка ниво E_WARNING

Забележка: За да се PHP интерпретатор съобщава грешка - PHP трябва да бъде съответно конфигуриран: трябва да бъдат включени display_errors флаг - 1, error_reporting директива следва да се посочи, че е необходимо да се покаже грешка ниво E_WARNING (разбира се, че е желателно и други). Ако стойностите на тези директиви, не отговарят на вашите нужди - можете да се опитате да го инсталирате сами, поставени в папка с .htaccess скриптовия файл (точка в началото на името задължително) за съдържание:

php_flag display_errors на
php_value error_reporting "E_ALL

Това означава, че грешката се показват съобщения, както и на всички нива, с изключение E_NOTICE Когато програмистът позволява синтактична грешка - PHP интерпретатор съобщава E_PARSE ниво грешка

Но най-интересното за нас, процентът на грешките - E_USER_ERROR и E_USER_WARNING. Както става ясно от заглавието - това нивата на грешки, които могат да бъдат инсталирани от потребителя. За тази цел има функция trigger_error () - с негова помощ, можете да уведоми потребителя за инцидент като това прави PHP.

Както знаем от ръководството на PHP - trigger_error () функция може да отнеме два параметъра.

невалидни trigger_error (низ ERROR_MSG [, Int ERROR_TYPE])

Първият вариант - за текста на съобщението за грешка, като "Файлът не е намерен". Вторият вариант - определя нивото на грешки. trigger_error () функция работи само с грешка E_USER семейство - това означава, че можете да инсталирате грешка ниво E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE и не може да се установи E_WARNING ниво. Вторият параметър е по желание и по подразбиране е E_USER_NOTICE.

Да приемем, нашите данни за новинарски емисии, се съхраняват в news.txt файл, и ако файлът не е намерен - вие трябва да подадете сигнал за грешка. програма текст ще изглежда по следния начин:

В резултат на това на PHP интерпретатора ще докладва ниво E_USER_NOTICE грешка Но това, което ни дава? Да започнем с това, че ако в php.ini файла .htaccess или са инсталирани в /home/mysite/my.log Тази директива файл ще бъдат автоматично добавени към записа на инцидента. На следващо място, с помощта на set_error_handler (функция), ние можем да инсталирате собствените си грешки, манипулатор, възникнали по време на изпълнението на PHP скрипт.

Както е известно от ръководството - в PHP 4 функция може да отнеме един-единствен параметър низ - името на функцията, която да се изпълнява винаги, когато възникне грешка. PHP 5 добавя възможност за задаване на още един параметър - вида на грешка, която ще се обработват с помощта на нашия треньор. Функцията връща низ - името на манипулатора, който е създаден, до този момент.

низ set_error_handler (обаждане error_handler [, Int error_types])

зададена като потребителски дефинирана функция, че ще се справят с тази грешка, тя може да предприеме следните входни параметри:

- код за грешка на ниво
- грешки устен низ
- името на файла, където е възникнала грешката
- Онлайн, където е възникнала грешката

Трябва също да се отбележи, че тази функция не може да се справи грешки E_ERROR нива, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING

Това се дължи на факта, че грешките, изброени нива, станали преди преводачът получава информация за манипулатор потребител грешка.

Ето защо, ние декларираме своята функция Забележка: всеки повече или по-малко съраунд сценария обикновено е разделен на няколко файла за удобство на работа с него. Как да се организира модулна програма - една тема на разговор на мира. Сега, аз просто искам да съветва да се разпределят общите настройки в отделен файл, който ще бъде свързан с началото на програмата, като се използва, включват обучение, или чрез директива auto_prepend_file. Този файл може да се постави и нашия манипулатор. Монтаж грешка манипулатор трябва да се реализира възможно най-близо до началото на програмата, е желателно, на първо място. За да се уверите, че тя наистина работи - създаване на нов PHP файл и се опитайте да го стартирате

File Content myerrortest.php

В резултат на обработката на файла изглежда така: Сега имаме функция, която получава данни за всички настъпили грешки. Ние считаме, как можем да я използваме.

Ние ще обработим нивата на грешки
E_ERROR
E_WARNING
E_NOTICE
E_USER_ERROR
E_USER_NOTICE

Първите три грешки в добър завършен програма не трябва да се случват на всички, така че за тях ще уведомим само потребителския терминал на текста за грешка на екрана. Така че можете да работите, докато сценарият е в състояние да се развива, и след това да ги докладват, можете да деактивирате или да пишете на лог-файл.

Сега нашата функция е обработката на грешки ще изглежда по следния начин:

Това е доста прост пример, темата може да се развива.