更新:
根据评论中@m.p.c的说法,当display_errors
开启时,在浏览器中会显示错误,但是它们不会出现在日志中。我曾经以为错误根本没有出现。
E_NOTICE
错误是唯一不出现在日志中的吗?还是所有类型的错误都受到影响?如果是所有类型的错误,那么我建议首先检查是否已经启用了错误日志记录。尝试在脚本顶部设置ini_set('log_errors', 'On');
。如果这样做不起作用,请尝试通过调用ini_set('error_log', 'your_file_path');
将您的日志文件设置为您确定服务器可以写入的内容。如果这两个方法都不起作用,则认为您的PHP安装存在严重问题。如果其中任何一个修复程序有效,则可以将其放入实际的php.ini
中(如果您有访问权限)。
原始答案:
根据您的问题中的error_reporting
级别,您的PHP安装应该已经设置为报告E_NOTICE
错误。如果没有记录这些错误,则说明出了问题。我建议打开display_errors
以查看是否显示任何E_NOTICE
错误。如果您无法更改php.ini
文件,请尝试在脚本顶部运行ini_set('display_errors', 'On');
。显然,这些错误只会在您触发其中一个时显示和/或记录,因此您应该再次检查是否确实在某个地方进行了操作。
有一个警告是,E_DEPRECATED
错误级别仅在PHP 5.3中引入。当我刚刚测试在PHP 5.2上设置E_DEPRECATED
时,PHP响应错误,并将error_reporting
级别设置为0
,这意味着它不报告任何错误。虽然对于一个早期的php.ini
文件来说使用这个设置毫无意义,但我认为至少需要提高您正在使用不支持它的服务器上的E_DEPRECATED
的可能性。如果您不确定自己的版本,可以运行phpinfo()
,它将显示包含大量信息的页面,包括您安装的版本号。
尽管如上所述,如果我误解了您的问题,并且您只是谈论创建自己的自定义日志记录,则需要创建一个函数以在出现错误时运行,并使用set_error_handler()
函数将其分配为错误处理程序。
重要提示: 当您使用
set_error_handler()
时,将完全绕过PHP的默认错误处理程序。这意味着您的
error_handler
级别将变得没有意义。所有错误,无论其严重性如何,都将传递到您创建的错误处理函数。 PHP传递给此函数的第一个参数将是错误编号,即找到的错误的
E_xxx
常量的数值。您需要编写自定义代码来仅捕获想要的错误。
例如,要捕获
仅E_NOTICE
错误,您的函数应如下所示:
function my_error_handler($errno, $errstr, $errfile, $errline) {
if ($errno == E_NOTICE) {
}
}
set_error_handler("my_error_handler");