2013-09-20 4 views
2

Я пишу программу в PHP с базой данных MYSQL. Я хочу поймать ошибку и дать пользователю определить ошибку вместо системной ошибки. Я использую try и catch для обработки исключений, но фатальная ошибка не попадает в try и catch.I использовал set_exception_handler, но он не работает для меня. Скажите мне, как поймать фатальную ошибку?Как поймать Fatal Error

+0

Просьба предоставить некоторый код – mazer

+0

возможный дубликат [Как поймать PHP Fatal Error] (http://stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal- ошибка) – NDM

ответ

1

Фатальные ошибки не могут быть отслежены непосредственно через error_handler(). Вы должны использовать register_shutdown_function(), чтобы поймать эти ошибки.

Пример:

<?php 
/** 
* Checks for a fatal error, work around for set_error_handler not working on fatal errors. 
*/ 
function check_for_fatal() 
{ 
    $error = error_get_last(); 
    if ($error["type"] == E_ERROR) 
     log_error($error["type"], $error["message"], $error["file"], $error["line"]); 
} 

register_shutdown_function("check_for_fatal"); 
?> 
0

Это модифицированный пример из PHP Руководство [Лично Испытано & Works]. Я не использовал register_shutdown() здесь.

<?php 

set_error_handler("log_error"); 
set_exception_handler("log_exception"); 
function log_error($num, $str, $file, $line, $context = null) 
{ 

    log_exception(new ErrorException($str, 0, $num, $file, $line)); 
} 

function log_exception(Exception $e) 
{ 

echo "Some Error Occured. Please Try Later."; 
exit(); 
} 

require_once("texsss.php");// I am doing a FATAL Error here 

ВЫВОД:

Некоторые ошибка. Пожалуйста, попробуйте позднее.