2009-03-25 3 views
2

Я использую PHP 4, единственный способ, которым я знаю, вызвать ошибку и остановить все, вызывает die(). Но в случае, если я столкнулся с ошибкой позже и не помню, откуда он пришел, я хотел бы указать номер страницы и строки, на котором произошла ошибка die() (как и другие ошибки php). Есть ли способ сделать это?Укажите страницу/строку при бросании die()?

Спасибо!

+0

Не относится к вашему вопросу, но, пожалуйста, не используйте PHP4. Он достиг своего «конца жизни», поэтому не получит никаких официальных исправлений или исправлений. – Oli

+0

Я согласен с @Oli - пришло время обновиться! – Greg

+0

@oli thanks Я планирую обновить, когда я обновляю серверы с помощью своего хоста. –

ответ

6

Вы должны смотреть в magic constants.

echo __LINE__; // Line number 

Вы также можете запустить error_log() отправить ошибки спокойно в журнал.

4

Самый простой способ заключается в использовании:

echo __FILE__ . ": line " . __LINE__; 
die(); 

Если вы должны были использовать PHP5, вы можете также использовать Исключения:

throw new Exception("My error message!"); 

Трассировка стека покажет весь стек вызовов и линии это было брошено.

(EDIT: Спасибо [@John Айзекс] и [@Emil H] для информирования меня, что исключения не были добавлены, чтобы PHP до PHP5)

+0

не знал об исключениях, спасибо! – helloandre

+0

Я считаю, что исключения были добавлены в v5. –

+0

Исправлено, Исключения недоступны до версии v5. –

2

В дополнение к @Jukka Dahlbom и @ предложений Олафур Waage ты может также рассмотреть возможность использования debug_backtrace().

+0

К сожалению, обработчик выключения «умирает» не будет «умирать» в обратном направлении. D: –

0

Лучше использовать error_log(), чтобы сообщить об ошибке и debug_backtrace() для отладки. Вы также можете написать свою собственную функцию обработки ошибок (см. set_error_handler()), чтобы объединить оба.

4

Я думаю, вы должны использовать trigger_error() для создания E_USER_ERROR или E_USER_WARNING. Это позволяет вам детально контролировать поведение. Например, вы можете указать, должны ли сообщения вообще отображаться с использованием error_reporting() или обрабатывать E_USER_WARNING: s явно использовать set_error_handler().

+0

+1, не знал о trigger_error перед этим. –