好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
如何捕获PHP的Fatal Error? 关闭 返回上一级  

如何捕获PHP的Fatal Error?
+ 查看更多

发布日期:2017-04-02 16:33
分类:PHP
浏览次数:105

我可以使用set_error_handler()这个函数捕获大部分的PHP错误,但它不适合致命(e_error)的错误,例如:调用一个不存在的函数。有别的能够捕捉致命错误(Fatal error)的方式吗?

PS:我想对所有的错误都调用mail()方法,这样我就可以收到邮件通知了,我现在使用的是PHP 5.2.3。


回答:

你可以使用register_shutdown_function这个回调函数来记录致命错误,这要求PHP 5.2 版本以上:

register_shutdown_function( "fatal_handler" );
function fatal_handler() {
  $errfile = "unknown file";
  $errstr  = "shutdown";
  $errno   = E_CORE_ERROR;
  $errline = 0;

  $error = error_get_last();

  if( $error !== NULL) {
    $errno   = $error["type"];
    $errfile = $error["file"];
    $errline = $error["line"];
    $errstr  = $error["message"];

    error_mail(format_error( $errno, $errstr, $errfile, $errline));
  }}

//你必须定义error_mail 和format_error函数,例如:

function format_error( $errno, $errstr, $errfile, $errline ) {
  $trace = print_r( debug_backtrace( false ), true );

  $content = "<table>
<thead><th>Item</th><th>Description</th></thead>
  <tbody>
  <tr>
    <th>Error</th>
    <td>$errstr</td>
  </tr>
  <tr>
    <th>Errno</th>
    <td>$errno</td>
  </tr>
  <tr>
    <th>File</th>
    <td>$errfile</td>
  </tr>
  <tr>
    <th>Line</th>
    <td>$errline</td>
  </tr>
  <tr>
    <th>Trace</th>
    <td>$trace</td>
  </tr>
  </tbody>
  </table>";

  return $content;}
上一篇在PHP中通过值(VALUE)而不使用键(KEY)删除数组中的一个元素
如何使用PHP输出JSON格式的结果下一篇
下一篇如何使用PHP输出JSON格式的结果

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号