更新:
根据对此答案的评论中的@mpc,打开时会在浏览器中显示错误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 中引入。当我刚刚E_DEPRECATED
在 PHP 5.2 安装上测试设置时,PHP 以错误响应,并将error_reporting
级别设置为0
,这意味着它根本不报告任何错误。虽然 5.3 之前的php.ini
文件使用此设置没有意义,但我认为至少提高您在E_DEPRECATED
不支持它的服务器上使用的可能性很重要。如果您不确定您的版本,您可以运行phpinfo()
,它会显示一个包含大量信息的页面,包括您安装的版本号。
尽管如此,如果我误解了您的问题并且您只是在谈论创建自己的自定义日志记录,那么您需要创建一个函数以在发生错误时运行并将其分配为使用该set_error_handler()
函数的错误处理程序。
需要注意的是,当您使用 时set_error_handler()
,您会完全绕过 PHP 的默认错误处理程序。这意味着你的error_handler
等级变得毫无意义。所有错误,无论其严重程度如何,都将传递给您创建的错误处理函数。E_xxx
PHP 传递给这个函数的第一个参数是错误号,它是找到的错误常量的数值。您需要编写自定义代码来仅捕获您想要的错误。
例如,要仅 E_NOTICE
捕获错误,您的函数应如下所示:
function my_error_handler($errno, $errstr, $errfile, $errline) {
if ($errno == E_NOTICE) {
// handle/log the error
}
}
set_error_handler("my_error_handler");