调试错误信息
通常,当发生致命运行时错误 (E_ERROR) 时,即使打开了错误,我们也会得到空白页或者 500 内部服务器错误响应。
这在尝试调试问题时不是很有帮助,但是,错误通常会记录在服务器错误日志中。
错误日志的位置取决于系统。
它通常位于 /var/log/apache2/example.com-error.log
将 example.com 替换为我们自己的 VHOST 日志名称。
找到日志文件后,我们可以在 Linux 中使用 tail 命令读取最后一行:
tail -n 1 /var/log/apache2/example-error.log
更改 -n 参数后的数字以调整要返回的行数。
自定义错误消息
E_ERROR 不应与 trigger_error 函数一起使用来显示自定义错误消息。
相反,请考虑使用 E_USER_ERROR 类型,它用于用户制作的错误消息:
trigger_error("Sorry friend. Something has prevented the script from running.", E_USER_ERROR);
只有 E_USER* 类型应该与 trigger_error 一起使用。
E_ERROR 的原因
E_ERROR 类型涵盖致命运行时错误,并且可能由许多不同的问题引起。
要找出导致问题的原因,请务必检查服务器日志文件。
使用类型提示时常见的一个原因可能是这样的:
未捕获的类型错误:传递给 my_function() 的参数 1 必须是字符串类型,给定的 int,调用于 ...
这个特殊错误意味着传递给 my_function 函数的第一个参数是错误的数据类型。
给出了一个字符串,但该函数仅适用于整数。
它也可能是由代码中的语法错误引起的,在这种情况下,通常会在错误日志中指出确切的行号:
PHP 解析错误:语法错误,意外的 ')' in ... 第 22 行
最后,缺少分号也是解析错误的常见原因:
PHP解析错误:语法错误,文件意外结束...
E_ERROR 代表 PHP 中的致命错误,并且可能在发生不可恢复的错误时发生。
E_ERROR 类型不能由自定义错误处理程序处理,而是传递给 PHP 的内置错误处理功能。
错误处理的级别可以在配置文件中控制,或者我们可以使用 error_reporting 函数在每个脚本的基础上控制它。
要仅报告致命错误 (E_ERROR),我们可以将以下内容放在靠近脚本顶部的某个位置:
error_reporting(E_ERROR);
我们可以使用管道字符 | 将其与其他错误类型结合起来。
要仅显示简单的运行错误,请使用以下命令:
error_reporting(E_ERROR | E_WARNING | E_PARSE);