Автор оригинала: David Wong.
Глава 1 уровень отчетности об ошибках
Ошибки в программах PHP обычно относятся к следующим трем областям:
синтаксическая ошибка:
Синтаксические ошибки являются наиболее распространенными и легко исправляемыми. Например, в коде отсутствует точка с запятой. Этот тип ошибки блокирует выполнение скрипта.
Ошибка выполнения:
Такого рода ошибка не помешает выполнению PHP-скрипта, но она помешает текущему выполнению. Выводится ошибка, но PHP-скрипт продолжается.
Логическая ошибка:
Такого рода ошибки являются самыми неприятными. Он не предотвращает выполнение сценария и не выводит сообщения об ошибках.
Иллюстрирует взаимосвязь между веб-сервером Apache и движком PHP.
Тематическое исследование:
//Syntax error, forgot to add semicolon
echo "123"
//Runtime error
echo '123';
function laowang(){
echo '456';
}
laoliu();
//Logic error, want to output the old Wang next door, the result is hat, in the system point of view, this is not a mistake.
if(1==1){
Echo "hat";
}else{
Echo "old Wang next door";
}Каковы уровни отчетов об ошибках в PHP?
Описания и настройки уровня ошибок можно найти в php .ini.
//Indicates that all error prompts are turned on but note errors are masked error_reporting = E_ALL & ~E_NOTICE //Turn off all error prompts directly. The development stage is generally on, but after going online, you will generally choose off display_errors = off/on
| 1 | E_ ОШИБКА | Фатальная ошибка во время выполнения (выполнение скрипта заблокировано) |
| 2 | E_ ПРЕДУПРЕЖДЕНИЕ | Предупреждение во время выполнения (не фатальная ошибка) |
| 4 | E_PARSE | Синтаксический анализ ошибок |
| 8 | E_NOTICE | Сообщение о внимании во время выполнения (может быть или не быть проблемой) |
| 16 | ОШИБКА E_CORE_ERROR | Фатальная ошибка при инициализации PHP при запуске |
| 32 | E_CORE_ ПРЕДУПРЕЖДЕНИЕ | Предупреждения во время инициализации запуска PHP (не фатальная ошибка) |
| 64 | ОШИБКА E_COMPILE_ERROR | Фатальная ошибка во время компиляции |
| 128 | ПРЕДУПРЕЖДЕНИЕ E_COMPILE_WARNING | Предупреждение о времени компиляции (не фатальная ошибка) |
| 256 | ОШИБКА E_USER_ERROR | Определяемая пользователем фатальная ошибка |
| 512 | E_USER_ ПРЕДУПРЕЖДЕНИЕ | Пользовательское предупреждение (не фатальная ошибка) |
| 1024 | E_USER_NOTICE | Пользовательские напоминания (часто ошибки) |
| 2048 | E_СТРИКТ | Предупреждение о стандартизации кодирования (рекомендуется изменить его для обеспечения прямой совместимости) |
| 6143 | E_ ВСЕ | Все ошибки, предупреждения и предостережения |
//Error values are generally system defined constants echo E_ERROR; //1 //1 2 4 8... 6143 principle //Use of binary, using the principle of light, wrong light. //000000000001 -- > is the first error
В реальной разработке никто не обращает внимания на уровень ошибки, значение ошибки, отчет об ошибке, посмотрите на тип, просто найдите ошибку напрямую.
В процессе разработки нам действительно нужно много работать с ошибками. Легко писать функции, как и в автомобиле, управлять автомобилем несложно, но если мы хотим обеспечить все виды безопасности, нам нужно много беспокоиться и учитывать множество факторов. Руководство такое же толстое, как словарь.
Глава 2 настройка уровня отчетов об ошибках
Динамически задайте, выводится ли информация об ошибке PHP, Она вступает в силу только в текущем скрипте и не влияет на глобальные настройки php.ini.
- Ошибка отображения: следует ли разрешить PHP выводить отчеты об ошибках.
Значения: вкл. (отчет об ошибке вывода по умолчанию), выкл. (маскирует все сообщения об ошибках)
В PHP-скрипте вы можете вызвать функцию INI set() для динамической настройки файла конфигурации php.ini
Например: набор ini (“ошибка отображения”, “вкл.”);//отображать все сообщения об ошибках
//Set whether to output error information
Ini set ('display error ', "off"); // close
Ini_set ('display error ', "on"); // enable
Ini set ('display error ', 0); // close
Ini set ('display error ', 1); // on
//Call function to test
aa();- Отчеты об ошибках: установите различные уровни отчетов об ошибках.
& ~E_НОТИС
— может выдать любую незамеченную ошибку, значение по умолчанию.
| E_PARSE | ОШИБКА E_CORE_ERROR
— учитывайте только фатальные ошибки во время выполнения, новые ошибки синтаксического анализа и основные ошибки.
& ~(ОШИБКА ПОЛЬЗОВАТЕЛЯ | ПРЕДУПРЕЖДЕНИЕ ПОЛЬЗОВАТЕЛЯ | УВЕДОМЛЕНИЕ ПОЛЬЗОВАТЕЛЯ)
— сообщайте обо всех ошибках, кроме тех, которые вызваны пользователями.
В PHP-скрипте уровень отчетов об ошибках может быть установлен динамически с помощью функции отчетов об ошибках (). Например, отчеты об ошибках (e-all);
//Dynamically set error level error_reporting(E_ALL); //Test, report all errors echo $a; //Turn on all errors except notice error_reporting(E_ALL & ~E_NOTICE); echo $a;
Тематическое исследование:
Ini set ('display error ', 1); // on
Error_reporting (e_all); // enable all errors
$sum = 0; // if it is blocked here, when using sum for the first time, if the variable is not defined, a notice error will be reported
for($i=0;$i<=10;$i++){
$sum+=$i;
}
echo $sum;
Strlen(); // string length function. If no parameter is given, a warning error will be reported, which will not affect program execution
echo "aaaaaaaa";
Aa(); // fatal error. The program will terminate when calling a non-existent function.Неправильные настройки параметров в php.ini (просто поймите, не нужно углубляться).
| Следует ли отображать ошибки, с которыми столкнулся движок PHP во время инициализации | Прочь | отображение_стартуп_ошибки |
| Определите расположение отчетов о ведении журнала | Прочь | лог_ошибки |
| Ошибки настройки могут быть отправлены в системный журнал | Нулевой | журнал ошибок |
| Максимальная длина каждой записи журнала в байтах. Значение 0 указывает заданную максимальную длину. | 1024 | лог_ошибки_макс_лен |
| Следует ли игнорировать повторяющиеся сообщения об ошибках в одном файле и строке | Прочь | ignore_repeated_ошибки |
| Игнорируйте повторяющиеся ошибки, возникающие в разных файлах и в разных строках одного и того же файла. | Прочь | ignore_repeated_источник |
| Запуск этой инструкции заставляет PHP сохранять самую последнюю информацию об ошибках в $PHP errormsg. | Прочь | ошибки отслеживания |
Глава 3 как записывать журналы PHP
1) использование документации (рекомендуется).
2) журнал ошибок записывается в журнал операционной системы.
Думая: зачем ты ведешь журнал?
1. Это удобно запрашивать при разработке. Как правило, фреймворк имеет свою собственную функцию ведения журнала, которую нужно только включить.
2. Соответствующая функция фонового журнала может быть разработана с помощью журнала операций для запроса администратора и облегчения управления.
3.1 документация
Сначала настройте файл php.ini
Error_reporting = e_all // every error will be sent to PHP
Display error = off // do not display error reports
*Log_errors = on // determines the location of logging statements
Log error Max len = 1024 // maximum length of each log entry
*Error? Log = g: / myerror. Log // specifies the file to which the error is writtenЭксперимент:
A(); // observe the log file Connect(); // observe the log file
Приведенная выше запись является журналом системных ошибок.
Размышление: могу ли я создать искусственный журнал, управляемый пользователем?
Используйте функцию: используйте error_log() для входа в файл PHP, и вы можете записать информацию в мой файл error.log.
Error_log ("user XXX wants to delete the user name with ID 69, which has been recorded in the log, please note this kid");Справочное руководство по параметрам.
Функция logger error() регистрирует ошибки
В предыдущем разделе мы использовали журнал ошибок (), чтобы сообщить о пользовательском сообщении об ошибке и позволить системе записать его, Только информацию о записи.
Использование триггера error() является более гибким, чем журнал ошибок, можно указать уровень и местоположение файла.
//You can use the error level provided by the system to log your own defined error information. The default is the notic level
Trigger_error ("user XXX wants to delete the user name with ID 69, which has been recorded in the log, please pay attention to this kid", e_user_error);3.2 запись ошибок в журнал операционной системы
Сначала настройте файл php.ini
Error_reporting = e_all // every error will be sent to PHP
*Display error = off // do not display error reports
*Log_errors = on // determines the location of logging statements
Log error Max len = 1024 // maximum length of each log entry
*Error_log = syslog // specifies the file to which the error is writtenИспользуйте четыре функции для входа в систему:
//Define? Syslog? Variables(); initialize configuration for system logs //Openlog(); opens a log link //Syslog(); send a log record //Closelog(); close log link
Эксперимент:
Aa(); // the log is no longer displayed, but recorded in the system log.
Нынешняя разработка устранила этот метод. Четыре функции должны использоваться одновременно. После занятий они могут пройти тестирование самостоятельно. Код выглядит следующим образом:
define_syslog_variables();
openlog("PHP5", LOG_PID , LOG_USER);
Syslog (log_warning, "presentation of warning report sent to syslog, warning time:. Date (" Y / M / D H: I: s "));
closelog();Как просматривать системные журналы окон.
Щелкните правой кнопкой мыши компьютер > управление (g) – > Системные инструменты > Просмотр событий > Журнал Windows > Приложение
Глава 4 обработка пользовательских ошибок
Настраиваемый метод обработки отчетов об ошибках может полностью обойти стандартные функции обработки ошибок PHP, так что вы можете печатать отчеты об ошибках в своем собственном формате или изменять положение печати отчетов об ошибках.
Грубо говоря, я не использую системное приглашение об ошибке, а меняю его на свое собственное.
Установить обработчик ошибок() — установка определяемой пользователем обработки ошибок.
Параметр: смешанный set_error_handler ( вызываемый $error_handler [, int $error_types /E_STRICT ] )
Функция обратного вызова: обратный вызов функции.
Так называемая функция обратного вызова:
function demo(){
Return "I don't want it";
}
function demo2(){
Return "neither do I";
}
function result($suan){
return $suan();
}
//Pass the function name Demo1 function name demo2 as a string parameter to the result function, then the above function can be called automatically. We say Demo1 and demo2 are callback functions of result
echo result('demo2');Тематическое исследование:
//The callback function also needs parameter reception, refer to the manual
/*
errno
The first parameter errno, which contains the error level, is an integer.
errstr
The second parameter, errstr, contains the error information. It is a string.
errfile
The third parameter is optional, errfile, which contains the file name where the error occurred. It is a string.
errline
The fourth parameter is an optional, errline, which contains the line number of the error. It is an integer.
*/
function callbackset($errno,$errstr,$errfile,$errline){
Echo "custom error handling: error level: {$errno}, error message: {$errstr}. File: {$errfile}, line {$errline}";
}
Set_error_handler ("callbackset"); // the return information set as an error is sent to callbackset for processing
echo $aa;Особое внимание: ошибка е﹐, е ﹐ разбор, е ﹐ Core ошибки﹐, е ﹐ основной ﹐ предупреждение, е ﹐ сравниваем ошибка﹐, е ﹐ сравниваем предупреждение ﹐ не эффективны, и они, как правило, отображается в оригинальный способ.
Оригинал: “https://developpaper.com/php-error-handling-of-common-modules/”