Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Функции PHP
 
 

Функции обработки ошибок и протоколирования

Введение

Имеются функции для обработки ошибок и протоколирования. Они позволяют определять ваши собственные правила обработки ошибок, а также модифицировать способ протоколирования ошибок. Это позволяет настроить работу с ошибками так, как вам это необходимо.

С помощью функций логинга вы можете направлять сообщения на другие машины, по email (или email на шлюз пэйджеров!), в системные логи, и.т.п., так что вы сможете выборочно записывать и отслеживать самые важные части ваших приложений и web-сайтов.

Функции сообщения об ошибках позволяют специализировать уровень и тип ошибок, начиная с простых уведомлений и заканчивая специализированными функциями, возвращаемых при возникновении ошибок.

Требования

Эти функции всегда доступны.

Установка

Для использования этих функций не требуется проведение установки, поскольку они являются частью ядра PHP.

Настройка во время выполнения

Поведение этих функций зависит от установок в php.ini.

Таблица 1. Конфигурация ошибок и протоколирования

Имя директивы Значение по умолчанию Примечание
error_reportingNULL 
display_errors"1" 
display_startup_errors"0" Доступна с PHP 4.0.3.
log_errors"0" 
log_errors_max_len"1024"Доступна с PHP 4.3.0.
ignore_repeated_errors"0"Доступна с PHP 4.3.0.
ignore_repeated_source"0"Доступна с PHP 4.3.0.
report_memleaks"1"Доступна с PHP 4.3.0.
track_errors"0" 
html_errors"1"Доступна с PHP 4.0.2.
docref_root""Доступна с PHP 4.3.0.
docref_ext""Доступна с PHP 4.3.2.
error_prepend_stringNULL 
error_append_stringNULL 
error_logNULL 
warn_plus_overloadingNULL 

Краткое разъяснение конфигурационных директив.

error_reporting integer

Устанавливает уровень сообщений об ошибках. Параметр является или целым числом, или названными константами. Уровни error_reporting и константы описаны в объявленных константах ядра PHP , и в php.ini. Для установки уровня выводимых сообщений об ошибках во время исполнения скрипта, используйте функцию error_reporting().

В PHP 4 и PHP 5 по умолчанию данное значение равно E_ALL & ~E_NOTICE. Данная установка не позволяет показывать ошибки уровня E_NOTICE. Однако отображение ошибок такого уровня, вероятно, вам потребуется при разработке и отладке скриптов PHP.

Примечание: Включение отображения ошибок уровня E_NOTICE во время исполнения скрипта имеет некоторые преимущества. Для отладки: NOTICE - сообщения предупредят Вас о возможных ошибках в вашем коде. Например, использование неопределенных переменных. Чрезвычайно полезно найти опечаток и экономить время для отладки. Ошибки уровня NOTICE предупреждают о плохом стиле сценария. Например, $arr[item] лучше записывать как $arr['item'], т.к. PHP может принять "item" за константу. Если это - не константа, PHP предполагает, что это - строковый индекс для массива.

Примечание: В PHP 5 доступен новый уровень ошибок E_STRICT. E_STRICT не включается в глобальный уровень E_ALL. Включение E_STRICT во время исполнения скрипта также имеет некоторые преимущества. STRICT сообщения помогут Вам использовать последний и самый большой предложенный метод контроля, например предупреждать Вас об использовании нежелательных функций.

В PHP 3 по умолчанию установка (E_ERROR | E_WARNING | E_PARSE).

display_errors boolean

Определяет, должны ли ошибки быть выведены на экран как часть вывода или они должны быть скрыты от пользователя.

Примечание: Эта особенность позволяет поддержать разработку и отладку программ и не должна использоваться в публичных скриптах (например подключенные к Internet системы).

Примечание: Хотя display_errors может быть установлена во время исполнения скрипта (с помощью ini_set ()), это не будет влиять на сценарий, если он имеет неустранимые ошибки (Fatal Errors).

display_startup_errors boolean

Даже когда display_errors включен, ошибки, которые происходят в момент запуска PHP, не отображаются. Рекомендуется оставить display_startup_errors в "off", за исключением отладки скриптов.

log_errors boolean

Говорит, должны ли сообщения об ошибках скриптов протоколироваться в файле регистрации ошибок сервера или error_log. Эта опция определяется сервером.

Замечание: Вам рекоммендуется использовать регистрацию ошибок вместо отображения ошибок в браузере, при использовании публичных скриптов.

log_errors_max_len integer

Устанавливает максимальную длину лога ошибок (log_errors) в байтах. В error_log добавляется информация о скрипте. По умолчанию значение равно 1024, а значение 0 указывает на неограниченность размера лога.

Если используется integer, значение измеряется байтами. Вы также можете использовать сокращённую запись, котораяо писана в соответствующем разделе FAQ.

ignore_repeated_errors boolean

Не регистрировать повторные сообщения. Повторные ошибки должны произойти в том же самом файле на той же самой строке, пока ignore_repeated_source не установлен в TRUE.

ignore_repeated_source boolean

Игнорировать источник сообщения при игнорировании повторных сообщений. Когда эта установка включена (ON), не будет происходить регистрирация ошибок с повторными сообщениями от различных файлов или строк кода.

report_memleaks boolean

Если этот параметр установлен в "OFF", то утечки памяти не будут показаны (на stdout или в файле регистрации). Это имеет только эффект на отладке, компиляции, и если error_reporting включает E_WARNING в позволенный список.

track_errors boolean

Если включена, последнее сообщение об ошибках будет всегда присутствовать в переменной $php_errormsg.

html_errors boolean

Выключает HTML-тэги в сообщениях об ошибках. Новый формат для ошибок HTML производит активизирующиеся кликом сообщения для прямого доступа пользователя к странице, на которой описывается ошибка или функция, породившая ошибку в порождении ошибки. Данная директива затрагивает директивы docref_root и docref_ext.

docref_root string

Новый формат вывода ошибок позволяет выводить справочную информацию на странице, описывающей ошибку или функцию, вызывающую ошибку. Вы можете загрузить справочник на вашем языке и установить его на ваш Web-сервер. Если локальная копия вашего справочника PHP находится в директории '/manual/' вы можете использовать docref_root=/manual/.


Дополнительно вы можете установить расширение для страниц вашей копии справочника по PHP, для этого служит директива docref_ext, как пример: docref_ext=.html. Также существует возможность использования внешних справочников по PHP. Во пример: docref_root=http://manual/en/ или docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"

docref_ext string

Смотрите docref_root.

Замечание: Значение директивы docref_ext должно начинаться с ТОЧКИ.

error_prepend_string string

Строка, которая выводится перед сообщениями об ошибках.

error_append_string string

Строка, которая выводится после сообщений об ошибках.

error_log string

Имя файла, где ошибки сценария должны быть зарегистрированы. Файл должен быть перезаписываем пользователем сервера. Если специальное значение syslog используется, ошибки вместо этого посылаются в системный лог. В Unix, это syslog(3), а в Windows NT это протокол событий системы. Системное протоколирование не поддерживается в Windows 95. Смотрите также syslog().

warn_plus_overloading boolean

Если включена эта опция, PHP выводит предупреждение, когда плюс оператор (+) используется в строках. Это должно облегчить возможность находить сценарии, которые должны быть переписаны к использованию конкатенации в строках вместо (+).

Предопределенные константы

Перечисленные ниже константы всегда доступны как часть ядра PHP.

Примечание: Вы можете использовать приведенные ниже константы в php.ini но не вне PHP, как например в httpd.conf, где используется другой принцип..

Таблица 2. Ошибки и протоколирование ошибок

Значение Константа Описание Примечание
1 E_ERROR Фатальные ошибки времени выполнения. Указывает на ошибки, которые не могут быть устранены, такие как проблемы выделения памяти. Выполнение скрипта останавливается.  
2 E_WARNING Предупреждения времени выполнения (нефатальные ошибки). Выполнение скрипта не останавливается.  
4 E_PARSE Ошибки разбора при компиляции. Ошибки разбора должны генерироваться только разборщиком.  
8 E_NOTICE Уведомления времени выполнения. При работе скрипта возникло нечто, что может указывать на ошибку, но может также появиться и при нормальном выполнении скрипта.  
16 E_CORE_ERROR Фатальные ошибки, возникающие при начальном старте РНР. Напоминает E_ERROR, но генерируется ядром PHP. Впервые с PHP 4
32 E_CORE_WARNING Предупреждения (нефатальные ошибки), возникающие при начальном старте РНР. Напоминает E_WARNING, но генерируется ядром PHP. Впервые с PHP 4
64 E_COMPILE_ERROR Фатальные ошибки компиляции. Напоминает E_ERROR, но генерируется машиной Zend Scripting Engine. Впервые с PHP 4
128 E_COMPILE_WARNING Предупреждения времени компиляции (нефатальные ошибки). Напоминает E_WARNING, но генерируется машиной Zend Scripting Engine. Впервые с PHP 4
256 E_USER_ERROR Генерируемое пользователем сообщение об ошибке. Напоминает E_ERROR, но генерируется в РНР-коде путём использования РНР-функции trigger_error(). Впервые с PHP 4
512 E_USER_WARNING Генерируемое пользователем предупреждение. Напоминает E_WARNING, но генерируется в РНР-коде путём использования РНР-функции trigger_error(). Впервые с PHP 4
1024 E_USER_NOTICE Генерируемое пользователем уведомление. Напоминает E_NOTICE, но генерируется в РНР-коде путём использования РНР-функции trigger_error(). Впервые с PHP 4
2047 E_ALL Все ошибки и предупреждения, если поддерживаются, за исключением уровня E_STRICT.  
2048 E_STRICT Примечания во время выполнения. Включите, чтобы PHP, предлагал замены вашему коду, который будет гарантировать лучшую функциональную совместимость и совместимость вашего кода с предыдущими версиями PHP. Впервые с PHP 5

Вышеупомянутые значения (числовые или символические) используются, чтобы создать bitmask, который определяет, о каких ошибках сообщать. Вы можете использовать поразрядные операторы, чтобы комбинировать(объединить) эти значения или маску некоторых типов ошибок. Обратите внимание что только '|', '~', '!', '^' и '&' будут понятны в пределах php.ini, однако, никакие поразрядные операторы не будут поняты в пределах php3.ini.

Примеры

Below we can see an example of using the error handling capabilities in PHP. We define an error handling function which logs the information into a file (using an XML format), and e-mails the developer in case a critical error in the logic happens.

Пример 1. Использование обработки ошибок в PHP скрипте

<?php
// мы сделаем нашу собственную обработку ошибок
error_reporting(0);

// определяемая пользователем функция обработки ошибок
function userErrorHandler($errno$errmsg$filename$linenum$vars
{
    
// timestamp для входа ошибки
    
$dt date("Y-m-d H:i:s (T)");

    
// определяем ассоциативный массив строки ошибки
    // в действительности единственные входы, которые
    // 
мы должны рассмотреть - это E_WARNING, E_NOTICE, E_USER_ERROR,
    // E_USER_WARNING и E_USER_NOTICE
    
$errortype = array (
                
E_ERROR           => "Error",
                
E_WARNING         => "Warning",
                
E_PARSE           => "Parsing Error",
                
E_NOTICE          => "Notice",
                
E_CORE_ERROR      => "Core Error",
                
E_CORE_WARNING    => "Core Warning",
                
E_COMPILE_ERROR   => "Compile Error",
                
E_COMPILE_WARNING => "Compile Warning",
                
E_USER_ERROR      => "User Error",
                
E_USER_WARNING    => "User Warning",
                
E_USER_NOTICE     => "User Notice",
                
E_STRICT          => "Runtime Notice"
                
);
    
// набор ошибок, на которые переменный след будет сохранен
    
$user_errors = array(E_USER_ERRORE_USER_WARNINGE_USER_NOTICE);
    
    
$err "<errorentry>\n";
    
$err .= "\t<datetime>" $dt "</datetime>\n";
    
$err .= "\t<errornum>" $errno "</errornum>\n";
    
$err .= "\t<errortype>" $errortype[$errno] . "</errortype>\n";
    
$err .= "\t<errormsg>" $errmsg "</errormsg>\n";
    
$err .= "\t<scriptname>" $filename "</scriptname>\n";
    
$err .= "\t<scriptlinenum>" $linenum "</scriptlinenum>\n";

    if (
in_array($errno$user_errors)) {
        
$err .= "\t<vartrace>" wddx_serialize_value($vars"Variables") . "</vartrace>\n";
    }
    
$err .= "</errorentry>\n\n";
    
    
// для проверки:
    // echo $err;

    // сохранить в файл регистрации ошибок, и послать мне по электронной почте,
    // если есть критическая пользовательская ошибка
    
error_log($err3"/usr/local/php4/error.log");
    if (
$errno == E_USER_ERROR) {
        
mail("phpdev@example.com""Critical User Error"$err);
    }
}


function 
distance($vect1$vect2
{
    if (!
is_array($vect1) || !is_array($vect2)) {
        
trigger_error("Incorrect parameters, arrays expected"E_USER_ERROR);
        return 
NULL;
    }

    if (
count($vect1) != count($vect2)) {
        
trigger_error("Vectors need to be of the same size"E_USER_ERROR);
        return 
NULL;
    }

    for (
$i=0$i<count($vect1); $i++) {
        
$c1 $vect1[$i]; $c2 $vect2[$i];
        
$d 0.0;
        if (!
is_numeric($c1)) {
            
trigger_error("Coordinate $i in vector 1 is not a number, using zero"
                            
E_USER_WARNING);
            
$c1 0.0;
        }
        if (!
is_numeric($c2)) {
            
trigger_error("Coordinate $i in vector 2 is not a number, using zero"
                            
E_USER_WARNING);
            
$c2 0.0;
        }
        
$d += $c2*$c2 $c1*$c1;
    }
    return 
sqrt($d);
}

$old_error_handler set_error_handler("userErrorHandler");

// undefined constant, generates a warning
$t I_AM_NOT_DEFINED;

// define some "vectors"
$a = array(23"foo");
$b = array(5.54.3, -1.6);
$c = array(1, -3);

// generate a user error
$t1 distance($c$b) . "\n";

// generate another user error
$t2 distance($b"i am not an array") . "\n";

// generate a warning
$t3 distance($a$b) . "\n";

?>

Смотрите также

Смотрите также syslog().

Содержание

debug_backtrace -- Генерирует след
debug_print_backtrace -- Prints a backtrace
error_log -- Посылает сообщение об ошибке куда-либо
error_reporting -- Устанавливает, о каких PHP ошибках необходимо сообщать
restore_error_handler -- Восстанавливает предыдущую функцию обработчика ошибок
restore_exception_handler --  Восстанавливает предварительно определенную функцию обработчика особых ситуаций
set_error_handler --  Устанавливает определяемую пользователем функцию обработчика ошибок
set_exception_handler --  Устанавливает определяемую пользователем функцию обработчика особых ситуаций
trigger_error -- Генерирует сообщения пользовательского уровня error/warning/notice
user_error -- Псевдоним функции trigger_error()
 
 
 Функции по алфавиту 
   Содержание   
 Функции по категориям 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS