`

php中通过register_shutdown_function记录fatal error

    博客分类:
  • PHP
php 
阅读更多
  今天发现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发送之后
  

1
0
分享到:
评论

相关推荐

    PHP中使用register_shutdown_function函数截获fatal error示例

    在PHP中,可以通过register_shutdown_function()函数来设置一个在脚本结束或者遇到致命错误时会被调用的函数。这个函数将在PHP关闭前被调用,无论是正常结束还是因为致命错误而导致的脚本终止。 register_shutdown_...

    php register_shutdown_function函数详解

    `register_shutdown_function`是PHP中的一个非常重要的函数,它允许你在PHP脚本执行完毕后,或者在特定的程序结束条件下,定义一个回调函数来执行。这个功能对于处理程序的清理工作,异常捕获,或者在程序结束后进行...

    PHP错误处理函数register_shutdown_function使用示例

    本文主要探讨PHP中的一个非常有用的函数——register_shutdown_function。这个函数能够注册一个用户自定义的函数,在脚本执行完毕或发生意外停止时被调用。使用这个函数可以优雅地处理程序运行结束时的清理工作或...

    PHP捕获Fatal error错误的方法

    Fatal error 一般是不需要捕获的, 但是在一个复杂的程序中, 如果...register_shutdown_function 能解决set_error_handler的不足. 通过此函数注册好程序结束回调函数, 就可以捕获平时捕获不到的错误了. 再通过 error_g

    php 自定义错误日志实例详解

    总结一下,通过使用`register_shutdown_function()`、`set_error_handler()`和`set_exception_handler()`,我们可以构建一个强大的自定义错误日志系统,它不仅能记录错误信息,还可以在程序结束时执行清理任务,以及...

    thinkPHP开发流程图

    - **注册shutdown函数**:通过`register_shutdown_function()`注册`fatalError`方法,用于捕获脚本执行结束时发生的致命错误。 - **设置错误处理器**:通过`set_error_handler()`设置`appError`方法来处理非致命...

    ThinkPHP3.1.3版本新特性概述

    此外,Think类新增的fatalError方法利用register_shutdown_function注册了一个回调,使得系统在遇到致命错误时,也能通过统一的异常模板进行友好的错误提示。 2. PDO参数绑定的支持:为了提高数据库操作的安全性和...

    acpi控制笔记本风扇转速

    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 ...

Global site tag (gtag.js) - Google Analytics