今天发现php中,如果要记录fatal error的时候,可以实用一个不错的函数,
叫register_shutdown_function,小结如下:
register_shutdown_function可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会被调用.所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处死掉了;
例子如下:
?php
$clean = false;
function shutdown_func(){
global $clean;
if (!$clean){
die("not a clean shutdown");
}
return false;
}
register_shutdown_function("shutdown_func");
$a = 1;
$a = new FooClass(); // 将因为致命错误而失败
$clean = true;
?>
再来一个记录fatal error的例子
function catch_fatal_error()
{
$last_error = error_get_last();
// 检查是否属于fatal_error
if(isset($last_error['type']) &&$last_error['type']==E_ERROR)
{
//相关的处理
}
}
register_shutdown_function('catch_fatal_error');
注意的是;
1,register_shutdown_function()函数可重复调用,但执行的顺序与注册的顺序相同
2,如果在调用register_shutdown_function()函数之前有exit()函数调用,register_shutdown_function()函数将不能执行
3,PHP4后支持注册函数参数传递
4,在某些服务端,如Apache,当前目录在register_shutdown_function()函数中能够改变
5,register_shutdown_function()函数执行在headers发送之后
分享到:
相关推荐
在PHP中,可以通过register_shutdown_function()函数来设置一个在脚本结束或者遇到致命错误时会被调用的函数。这个函数将在PHP关闭前被调用,无论是正常结束还是因为致命错误而导致的脚本终止。 register_shutdown_...
`register_shutdown_function`是PHP中的一个非常重要的函数,它允许你在PHP脚本执行完毕后,或者在特定的程序结束条件下,定义一个回调函数来执行。这个功能对于处理程序的清理工作,异常捕获,或者在程序结束后进行...
本文主要探讨PHP中的一个非常有用的函数——register_shutdown_function。这个函数能够注册一个用户自定义的函数,在脚本执行完毕或发生意外停止时被调用。使用这个函数可以优雅地处理程序运行结束时的清理工作或...
Fatal error 一般是不需要捕获的, 但是在一个复杂的程序中, 如果...register_shutdown_function 能解决set_error_handler的不足. 通过此函数注册好程序结束回调函数, 就可以捕获平时捕获不到的错误了. 再通过 error_g
总结一下,通过使用`register_shutdown_function()`、`set_error_handler()`和`set_exception_handler()`,我们可以构建一个强大的自定义错误日志系统,它不仅能记录错误信息,还可以在程序结束时执行清理任务,以及...
- **注册shutdown函数**:通过`register_shutdown_function()`注册`fatalError`方法,用于捕获脚本执行结束时发生的致命错误。 - **设置错误处理器**:通过`set_error_handler()`设置`appError`方法来处理非致命...
此外,Think类新增的fatalError方法利用register_shutdown_function注册了一个回调,使得系统在遇到致命错误时,也能通过统一的异常模板进行友好的错误提示。 2. PDO参数绑定的支持:为了提高数据库操作的安全性和...
Restructured the AML ParseLoop function, breaking it into several subfunctions in order to reduce CPU stack use and improve maintainability. (Mikhail Kouzmich) AcpiGetHandle: Fix for parameter ...