PHP自定义错误处理函数:set_error_handler()

set_error_handler

set_error_handler — 设置一个用户定义的错误处理函数

 

说明

mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] )

设置一个用户的函数(error_handler)来处理脚本中出现的错误。

本函数可以用你自己定义的方式来处理运行中的错误, 例如,在应用程序中严重错误发生时,或者在特定条件下触发了一个错误(使用 trigger_error() ),你需要对数据/文件做清理回收。

重要的是要记住 error_types 里指定的错误类型都会绕过 PHP 标准错误处理程序, 除非回调函数返回了 FALSE 。 error_reporting() 设置将不会起到作用而你的错误处理函数继续会被调用 —— 不过你仍然可以获取 error_reporting 的当前值,并做适当处理。 需要特别注意的是带 @ error-control operator 前缀的语句发生错误时,这个值会是 0。

同时注意,在需要时你有责任使用 die() 。 如果错误处理程序返回了,脚本将会继续执行发生错误的后一行。

以下级别的错误不能由用户定义的函数来处理: E_ERROR 、 E_PARSE 、 E_CORE_ERROR 、 E_CORE_WARNING 、 E_COMPILE_ERROR 、 E_COMPILE_WARNING ,和在 调用 set_error_handler() 函数所在文件中产生的大多数 E_STRICT 。

如果错误发生在脚本执行之前(比如文件上传时),将不会 调用自定义的错误处理程序因为它尚未在那时注册。

 

参数

error_handler

用户的函数需要接受两个参数:错误码和描述错误的 string。 另外有可能提供三个可选参数:发生错误的文件名、发生错误的行号 以及发生错误的上下文(一个指向错误发生时活动符号表的 array)。 该函数可以表示为:

handler ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )

errno 第一个参数 errno,包含了错误的级别,是一个 integer。

errstr 第二个参数 errstr,包含了错误的信息,是一个 string。

errfile 第三个参数是可选的,errfile, 包含了发生错误的文件名,是一个 string。

errline 第四个参数是一个可选项, errline, 包含了错误发生的行号,是一个 integer。

errcontext 第五个可选参数, errcontext, 是一个指向错误发生时活动符号表的 array。 也就是说,errcontext会包含错误触发处作用域内所有变量的数组。 用户的错误处理程序不应该修改错误上下文(context)。

php自定义错误处理函数

如果函数返回 FALSE ,标准错误处理处理程序将会继续调用。

error_types

就像error_reporting 的 ini 设置能够控制错误的显示一样, 此参数能够用于屏蔽 error_handler 的触发。 如果没有该掩码, 无论 error_reporting 是如何设置的, error_handler 都会在每个错误发生时被调用。

 

返回值

如果之前有定义过错误处理程序,则返回该程序名称的 string;如果是内置的错误处理程序,则返回 NULL 。 如果你指定了一个无效的回调函数,同样会返回 NULL 。 如果之前的错误处理程序是一个类的方法,此函数会返回一个带类和方法名的索引数组(indexed array)。

  1. <?php
  2. // 用户定义的错误处理函数
  3.  function myErrorHandler($errno$errstr$errfile$errline) {
  4.      echo "<b>Custom error:</b> [$errno] $errstr<br>";
  5.      echo " Error on line $errline in $errfile<br>";
  6.  }
  7.  // 设置用户定义的错误处理函数
  8.  set_error_handler("myErrorHandler");
  9.  $test=2;
  10.  // 触发错误
  11.  if ($test>1) {
  12.      trigger_error("已触发一个自定义错误");
  13.  }
  14. //t程序运行结果:
  15. //Custom error: [1024] 已触发一个自定义错误
  16. //Error on line 52 in F:\xampp\htdocs\php\handler.php

 

提醒:trigger_error()函数和set_error_handler()函数配合使用才最佳!

    A+
发布日期:2016年12月29日 18:03:30  所属分类:PHP函数
最后更新时间:2016-12-29 18:50:13
付杰
  • ¥ 45.0元
  • 市场价:45.0元
  • ¥ 99.0元
  • 市场价:199.0元
  • ¥ 79.0元
  • 市场价:99.0元
  • ¥ 58.0元
  • 市场价:58.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: