繁体   English   中英

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

[英]on what does the error_reporting directive impacts?

根据我的阅读,该指令指定将向脚本输出报告的错误类型(如果显示错误已启用),或者如果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" ;

?>

错误是:

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

由于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: 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM