我正在使用 MYSQL 数据库在 PHP 中编写程序。我想捕获错误并给用户定义错误而不是系统错误。我正在使用 try 和 catch 来处理异常,但 try 和 catch 没有捕获到致命错误。我使用了 set_exception_handler 但它不适合我。告诉我如何捕捉致命错误?
问问题
147 次
3 回答
3
1) 简单
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 回答