PHP Обработка ошибок
В PHP, обработка ошибок по умолчанию очень просто. Сообщение об ошибке посылается в браузер, сообщение с именем файла, номер строки и описание сообщения об ошибке.
PHP Обработка ошибок
При создании сценариев и веб-приложений, обработка ошибок является важной частью. Если код ошибки отсутствует код проверки, ваша программа может выглядеть очень непрофессионально, но и открывает двери для угроз безопасности.
В этом учебнике представлены некоторые из наиболее важных в PHP метода обнаружения ошибок.
Мы объясним ваши различные методы обработки ошибок:
- Простой "умереть ()" заявление
- Пользовательские ошибки и триггеры ошибок
- Сообщения об ошибках
Основная обработка ошибок: С помощью функции штампа ()
Первый пример показывает простой скрипт, который открывает текстовый файл:
<?php $file=fopen("welcome.txt","r"); ?>
Если файл не существует, вы получите сообщение об ошибке, подобное следующему:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /www/w3big/test/test.php on line 2
Чтобы запретить пользователям получать сообщение об ошибке, подобное приведенному выше, мы рассмотрели файл перед доступа к файлу существует:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
Теперь, если файл не существует, то вы получите сообщение об ошибке подобное:
文件不存在
По сравнению с предыдущим кодом, приведенный выше код является более эффективным, так как он использует простой механизм обработки ошибок, чтобы завершить сценарий после ошибки.
Тем не менее, просто прекратить сценарий не всегда правильный путь. Давайте посмотрим на альтернативные функции PHP для обработки ошибок.
Создание пользовательского обработчика ошибок
Создание обработчика ошибок довольно проста. Мы просто создаем специальную функцию, которая может быть вызвана при возникновении ошибки в PHP.
Эта функция должна быть способна обрабатывать как минимум два параметра (уровень ошибок и сообщений об ошибках), но может принять до пяти параметров (опционально: файл, линейный номер и контекст ошибки):
грамматика
error_function(error_level,error_message, error_file,error_line,error_context)
параметры | описание |
---|---|
error_level | Обязательный параметр. Ошибка определяется как определенный пользователем уровень сообщений об ошибках. Оно должно быть числом. В следующей таблице: Ошибка уровня отчетности. |
error_message | Обязательный параметр. указано, определяемое пользователем сообщение об ошибке ошибка. |
error_file | Необязательно. Произошла файла указанная ошибка. |
error_line | Необязательно. Предустановленное номер строки произошла ошибка. |
error_context | Необязательно. Определяет массив, содержащий каждую переменную при возникновении ошибки в использовании и их значения. |
уровень сообщений об ошибках
Эти уровни отчета об ошибке являются различные типы ошибок Error Handler пользовательской обработки:
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE | run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
Теперь, давайте создадим функцию для обработки ошибок:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); }
Код выше простая функция обработки ошибок. При срабатывании, он получит уровень ошибок и сообщения об ошибках. Затем он выводит уровень ошибки и сообщение и завершает сценарий.
Теперь мы создали функцию обработки ошибок, мы должны определить, когда, чтобы вызвать функцию.
Установка обработчика ошибок
обработчик ошибок по умолчанию PHP является встроенный обработчик ошибок. Мы собираемся преобразовать функцию выше длительности обработчика ошибок по умолчанию сценария.
Вы можете изменить обработчик ошибок, так что она применяется только к какой-то ошибки, так что сценарий может быть различные способы обработки различных ошибок. Тем не менее, в данном случае, мы намерены использовать для всех обработчиком ошибок Error нашего изготовленного на заказ:
set_error_handler("customError");
Так как мы хотим, чтобы наша пользовательская функция для обработки всех ошибок, set_error_handler () нужен только один параметр, вы можете добавить второй аргумент, чтобы определить уровень ошибки.
примеров
Пытаясь выходную переменную, которая не существует, чтобы проверить обработчик ошибок:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); ?>
Выход указанного выше кода выглядит следующим образом:
Error: [8] Undefined variable: test
Trigger Error
В сценарии пользователь ввода данных, когда местоположение пользовательского ввода не срабатывает, когда ошибка полезно. В PHP, это делается с помощью функции trigger_error () для завершения операции.
примеров
В этом примере, если переменная "тест" больше, чем "1", то возникает ошибка:
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
Выход указанного выше кода выглядит следующим образом:
Notice: 变量值必须小于等于 1 in /www/test/w3big.php on line 5
Вы можете вызвать ошибку в сценарии в любом месте, путем добавления второго параметра можно указать уровень ошибки срабатывает.
Возможные типы ошибок:
- E_USER_ERROR - Fatal сгенерированный пользователем ошибка времени выполнения. Неисправимая ошибка. Выполнение скрипта прерывается.
- E_USER_WARNING - Некритическое пользователями предупреждение во время выполнения. Выполнение скрипта не прерывается.
- E_USER_NOTICE - по умолчанию. Добавленное пользователем во время выполнения уведомления. Когда сценарий найден может произойти ошибка, но может также произойти в нормальном режиме работы скрипта.
примеров
В этом примере, если переменная "тест" больше, чем "1", происходит ошибка E_USER_WARNING. Если это произойдет E_USER_WARNING, мы будем использовать наш обработчик ошибок и закончить сценарий:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
Выход указанного выше кода выглядит следующим образом:
Error: [512] 变量值必须小于等于 1 脚本结束
Теперь, когда мы узнали, как создать свою собственную ошибку, и как вызвать их, давайте посмотрим на журнал ошибок.
Журнал ошибок
В случае невыполнения, в зависимости от конфигурации error_log установлен в php.ini, PHP отправляет систему записи об ошибке записи или файлового сервера. При использовании error_log () функции, которые вы можете отправить журналы ошибок в указанный файл или удаленный адрес назначения.
Он отправляет сообщение об ошибке к себе по электронной почте является хорошим способом, чтобы получить уведомление о конкретных ошибках.
Сообщение об ошибке посылается по электронной почте
В следующем примере, если возникает специфическая ошибка, мы будем посылать электронную почту с сообщением об ошибке и завершить сценарий:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "[email protected]","From: [email protected]"); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
Выход указанного выше кода выглядит следующим образом:
Error: [512] 变量值必须小于等于 1 已通知网站管理员
Сообщения, полученные от приведенного выше кода выглядит следующим образом:
Error: [512] 变量值必须小于等于 1
Этот способ не подходит для всех ошибок. Обычная ошибка должна быть с помощью системы протоколирования PHP по умолчанию для записи на сервере.