关于error_reporting指令的影响是什么?

时间:2014-08-19 09:28:07

标签: php error-reporting

从我所看到的这个指令指定将向脚本输出报告的错误类型(如果显示错误打开),或者如果log_errors为ON则将报告给error_logs。

为什么在以下脚本中我将 error_reporting 设置为0(关闭error_reporting)并仍然收到描述致命错误的消息?

<?php
error_reporting(0) ; 

function a(&$name)
{

}

a("gg") ; // cause a fatal error, and display the message 

echo "gg" ;

?>

错误是:

  

致命错误:只能通过引用传递变量

1 个答案:

答案 0 :(得分:3)

由于error_reporting是函数调用,因此必须执行它才能生效。但是在脚本中的任何内容都可以执行之前,必须解析整个脚本。如果存在解析错误,则不会运行任何内容,因此无法更改错误报告。因此,始终根据php.ini中的错误报告设置报告解析错误。

对于脚本,当声明函数采用引用参数时,会更改对函数的调用的解析方式。它不需要允许任何表达式作为参数,而是要求它具有变量的语法。由于"gg"不是变量,因此在解析过程中会出现致命错误。

error_reporting控制报告只能在运行时检测到的错误,通常是由于变量的值。举个例子:

$numerator = 1;
$denominator = 0;

error_reporting(E_ALL); 
echo "WIth error reporting: ";
echo $numerator/$denominator;
echo "<br>";

error_reporting(0);

echo "WIthout error reporting: ";
echo $numerator/$denominator;
echo "<br>";

这将报告第一个分区的错误,但不报告第二个分区的错误:

WIth error reporting: 
Warning: Division by zero in /private/var/folders/ts/tsRTg2iv2RW88k+8ZOgz7++++TY/-Tmp-/1B4537F5-61D1-487A-9062-9204D7A058D3 on line 9

WIthout error reporting: 
相关问题