Latest web development tutorials
×

PHP курс

PHP курс PHP Краткое введение PHP устанавливать PHP грамматика PHP переменная PHP echo/print PHP Типы данных PHP постоянная PHP строка PHP операторы PHP If...Else PHP Switch PHP массив PHP Сортировка массива PHP Суперглобальные PHP While циркуляция PHP For циркуляция PHP функция PHP Магические Переменные PHP Пространства имен PHP Объектно-ориентированный

PHP форма

PHP форма PHP Аутентификация с помощью форм PHP форма - Обязательные для заполнения поля PHP форма - Проверка электронной почты и URL PHP Полный экземпляр формы PHP $_GET переменная PHP $_POST переменная

PHP Расширенный учебник

PHP Многомерные Массивы PHP дата PHP содержать PHP файл PHP Загрузка файлов PHP Cookie PHP Session PHP E-mail PHP безопасности E-mail PHP Error PHP Exception PHP фильтр PHP Расширенный фильтр PHP JSON

PHP 7 Новые возможности

PHP 7 Новые возможности

PHP база данных

PHP MySQL Краткое введение PHP MySQL подключение PHP MySQL Создание базы данных PHP MySQL Создание таблицы данных PHP MySQL Вставка данных PHP MySQL Вставка нескольких данных PHP MySQL Подготовленные выражения PHP MySQL Считывание данных PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX Краткое введение AJAX PHP AJAX база данных AJAX XML AJAX Поиск в реальном времени AJAX RSS Reader AJAX голосование

PHP справочное руководство

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP обработка изображений PHP RESTful

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 по умолчанию для записи на сервере.