从我所看到的这个指令指定将向脚本输出报告的错误类型(如果显示错误打开),或者如果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" ;
?>
错误是:
致命错误:只能通过引用传递变量
答案 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: