2

我正在使用 MYSQL 数据库在 PHP 中编写程序。我想捕获错误并给用户定义错误而不是系统错误。我正在使用 try 和 catch 来处理异常,但 try 和 catch 没有捕获到致命错误。我使用了 set_exception_handler 但它不适合我。告诉我如何捕捉致命错误?

4

3 回答 3

3

1) 简单

如何捕获 PHP 致命错误

2) 抓住所有

设置用户函数 (error_handler) 以处理脚本中的错误。

http://php.net/manual/en/function.set-error-handler.php

http://php.net/manual/en/book.errorfunc.php

3)阅读https://barelysufficient.org/2011/03/ catch-fatal-errors-in-php/

于 2013-09-20T06:14:55.423 回答
1

Fatal errors cannot be tracked directly through error_handler(). You need to use register_shutdown_function() to catch those errors.

Example:

<?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" );
?>
于 2013-09-20T06:19:20.070 回答
0

这是来自 PHP Manual [Personally Tested & 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

输出 :

发生了一些错误。请稍后再试。

于 2013-09-20T07:18:14.453 回答