error_reporting函数用法的奇特之处

发布时间:2019-06-13 19:44:09 来源:青锋建站 作者:青锋建站
  我们使用error_reporting函数控制PHP错误的显示级别,但是这个函数却有着许多不确定的使用与表现结果。体现在运行时的显示级别与PHP.INI配置文件的控制级别、error_reporting对文件的生效范围、与异常处理的结合。以下是青锋建站给大家作下详细分析。

error_reporting官方说法

  error_reporting() 函数能够在运行时设置 error_reporting 指令。 PHP 有诸多错误级别,使用该函数可以设置在脚本运行时的级别。 如果没有设置可选参数 level, error_reporting() 仅会返回当前的错误报告级别。
  level:新的 error_reporting 级别。 可以是一个位掩码也可以是一个已命名的常量。 强烈建议使用已命名的常量,以确保兼容将来的版本。 由于错误级别的添加、整数取值范围的增加, 较久的基于整数的错误级别不会总是和预期的表现一致。 可用的错误级别常量及其实际含义描述在了 predefined constants 中。

对于LEVEL运行时与PHP.INI配置文件优先级

  在运行时使用error_reporting受PHP.INI配置文件的限制,PHP.INI配置文件的优先级别高于error_reporting控制的显示级别。也就是说如何在PHP.INI配置文件中关闭错误显示和不执行错误,那么在运行时使用error_reporting(E_ALL);ini_set('display_errors',true);将无效。
  使用以下代码测试,此时PHP.INI文件配置为display_errors = On和error_reporting  =  E_ALL。错误报告正常,如下图。
error_reporting
  然后我们把配置文件中的的这两项关闭,然后所有的错误报告不再显示,注意这里要清除下缓存,如果不清除会导致结果不正常。

error_reporting函数可以控制的LEVEL

  error_reporting函数并不是可以控制所有的错误级别的报告,对于某些级别的Fatal error就无法关闭,注意是某些,以下两种同样是Fatal error,一个可以控制,另一个无法控制
  func_not_exists("function not exists!");//可以控制是否可以报告。
  echo 'yes' //注意这里没有“;”用来模拟语法错误。这个就无法控制了。

error_reporting函数与文件的联系

  当我们把以下四个有错误的语句拿到另外一个脚本,而后在主脚本进行包含,并关闭错误显示来进行测试结果,脚本代码如下:
<?php
error_reporting(0);
ini_set('display_errors',false);
require('form.php');

'form.php'文件内容如下:
trigger_error('test');//用户触发错误
echo $variable_not_exists;//通知错误
func_not_exists("function not exists!");//语法错误
echo 'i lost semicolon operator'; //语法错误
  最终显示结果:当关闭错误执行时,通过包含过来有错误的文件时,不显示错误。当把错误报告打开时,只显示Fatal error警告级别的错误。
  
结论:error_reporting不能关闭当前主脚本的警告级别的错误,但可以关闭加载进行来脚本的错误。利用这个特性,保证主脚本无错误的情况下,可以使用error_reporting来关闭更多的错误。

与异常处理的结合

  在PHP7中,使用了新的机制来处理错误,这完全不同于PHP5中的错误处理机制,在PHP7中可以捕获错误, 您可以通过捕获(Throwable)捕获异常和错误。Throwable在PHP5.x上不起作用。要捕获PHP5.x和7中的异常和错误,请先为捕获Throwable后的异常添加捕获块。一旦不再需要PHP5.x支持,就可以删除块捕获异常。
  以上就是青锋建站给大家分享的error_reporting错误报告显示函数在实际运用的关键技巧。青锋建站,提供专业的高品质网站制作服务,包括PHP网站建设,SEO,网络营销,PHP软件开发,专业做优化型网站,为企业构建营销平台。
分享到:

Copyright © 2016-2026 青锋建站 版权所有