РНР 5 в подлиннике

Страница 218 из 554


Гпава 23. Управление интерпретатором

441

Вот теперь все работает корректно: предупреждение не отображается в браузере, т. к. применен оператор @.

Генерация ошибок

void trigger_error(string $message [, int $type])

Данная функция предназначена для искусственной генерации сообщения об ошибки с указанным типом. В РНР существует несколько констант, чьи имена начинаются с e_user_, которые можно использовать наравне с e_error, e_warning и т. д., но только для персональных нужд. Именно с функцией triggererror о они чаще всего и применяются. Вот эти константы:

□ e_user_error;

□ e_user_warning;

□ e_user_notice.

Как их использовать — целиком зависит от программиста: никаких ограничений не налагается.

int error_log(string $msg [,int $type=0] [,string $dest] [, string $extra_headers])

Выше мы рассматривали директивы iog_errors и error_iog, которые заставляют РНР записывать диагностические сообщения в файл, а не только выводить их в браузер. Функция error_iogo по своему смыслу похожа на trigger_error о, однако, она заставляет интерпретатор записать некоторый текст ($msg) в файл журнала (при нулевом $type и по умолчанию), заданный в директиве error_iog. Основные значения аргумента $type, которые может принимать функция, перечислены ниже.

□ $type == О

Записывает сообщение в системный файл журнала или в файл, заданный в директиве error_log.

□ Stype == 1

Отправляет сообщение по почте адресату, чей адрес указан в $dest. При этом $extra_headers используется в качестве дополнительных почтовых заголовков (см. функцию mailt) из гл. 27).

□ $type == 3

Сообщение добавляется в конец файла с именем $cfest.

Стек вызовов функций

В РНР версии 4.3.0 и старше существует возможность проследить всю цепочку вызовов функций, начиная от главной программы и заканчивая текущей выполняемой процедурой.

list debug_backtrace()

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

442

Часть IV. Стандартные функции РНР

Листинг 23.12. Файл trace.php

<?php ## Вывод дерева вызовов функции, function inner($а) { // Внутренняя функция.

echo "<pre>"; print_r(debug_backtrace()); echo "</pre>";

}

function outer($x) {

// Родительская функция, inner($x*$x);

)

// Главная программа.

outer(3);

?>

После запуска этого скрипта будет напечатан примерно следующий результат (правда, мы его чуть сжали):

Array (

[0] => Array (

[file] => z:\home\book\original\src\interpreter\trace.php [line] => 6 [function] => inner [args] => Array ([0] => 9)

)

[1] => Array (

[file] => z:\home\book\original\src\interpreter\trace.php [line] => 8 [function] => outer [args] => Array ([0] => 3)

)

)

Как видите, в массиве оказалась все информация о промежуточных вызовах функций.

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

Принудительное завершение программы

void exit ()

Эта функция немедленно завершает работу сценария. Из нее никогда не происходит возврата. Перед окончанием программы вызываются функции-финализаторы, которые скоро будут нами рассмотрены.




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006