将警告视为错误

2022-08-30 21:52:09

我有一个php应用程序,我刚刚重构了。不幸的是,它发出了如下警告:

警告:preg_match() 要求参数 2 为字符串,对象在第 776 行的 /home/yacoby/dev/netbeans/php/Zend/Db/Select.php

这是不可能的(或非常艰苦的工作)解决问题,因为我没有调用堆栈,所以无法分辨我的代码的哪些部分导致警告,并且有很多代码。

我需要一种方法来像错误一样处理警告(因为应用程序会死机并打印堆栈跟踪),或者我需要在打印错误时显示堆栈跟踪。有没有办法做到这一点?


答案 1

请参阅 http://www.php.net/manual/en/class.errorexception.php 中的示例 #1

<?php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");

/* Trigger exception */
strpos();
?>

答案 2

查看set_error_handler(),并将其包含在脚本的开头或引导程序中,以便在发生E_WARNINGs时打印堆栈跟踪。

function stacktrace_error_handler($errno,$message,$file,$line,$context)
{
    if($errno === E_WARNING) {
        debug_print_backtrace();
    }
    return false; // to execute the regular error handler
}
set_error_handler("stacktrace_error_handler");

要更好地控制各种类型,请查看答案中其他地方发布的更明确的版本。


推荐