set_error_handler包含错误的多个回声

时间:2012-07-03 21:02:34

标签: php error-handling

为什么包含错误会回显四次?

系统是否尝试4次“开放流”?

我做了:

function errorHandler($errno, $errstr, $errfile, $errline) {
    if ($errno == E_NOTICE ) {
        echo "<br/>".$errno."== E_NOTICE<br/>";
    }
    if ($errno == E_USER_NOTICE) {
        echo "<br/>".$errno."== E_USER_NOTICE<br/>";
    }
    if ($errno == E_DEPRECATED) {
        echo "<br/>".$errno."== E_DEPRECATED<br/>";
    }
    if ($errno == E_USER_DEPRECATED) {
        echo "<br/>".$errno."== E_USER_DEPRECATED<br/>";
    }
    if ($errno == E_STRICT) {
        echo "<br/>".$errno."== E_STRICT<br/>";
    }
    if ($errno == E_WARNING) {
        echo "<br/>".$errno."== E_WARNING<br/>";
    }
    if ($errno == E_USER_WARNING) {
        echo "<br/>".$errno."== E_USER_WARNING<br/>";
    }
    if ($errno == E_ERROR) {
        echo "<br/>".$errno."== E_ERROR<br/>";
    }
    if ($errno == E_USER_ERROR) {
        echo "<br/>".$errno."== E_USER_ERROR<br/>";
    }
}
set_error_handler("errorHandler"); 

结果:

2== E_WARNING

2== E_WARNING

2== E_WARNING

2== E_WARNING

1 个答案:

答案 0 :(得分:1)

如果没有看到与您的错误有关的其他信息,很难说。

  

根据给定的文件路径包含文件,如果没有给出,则包含   指定的include_path。如果在。中找不到该文件   include_path,include将最终检入调用脚本自己的   失败前的目录和当前工作目录。该   如果找不到文件,include构造将发出警告;这个   与require不同的行为,会发出致命的错误。

include()的文档。

  

在查找要包含的文件时,PHP会分别考虑包含路径中的每个条目。它将检查第一条路径,如果它   找不到它,检查下一条路径,直到找到它为止   包含文件或带有警告或错误的返回。你可以修改或   使用set_include_path()在运行时设置包含路径。

根据包含流程的PHP docs

另外,我已对您提供的自定义errorHandler()功能进行了一些修改。

<?php
function errorHandler($errno, $errstr, $errfile, $errline) {
    $response;

    switch ($errno){
        case E_NOTICE:
            $reponse = 'E_NOTICE';
            break;

        case E_USER_NOTICE:
            $reponse = 'E_USER_NOTICE';
            break;

        case E_DEPRECATED:
            $reponse = 'E_DEPRECATED';
            break;

        case E_USER_DEPRECATED:
            $reponse = 'E_USER_DEPRECATED';
            break;

        case E_STRICT:
            $reponse = 'E_STRICT';
            break;

        case E_WARNING:
            $reponse = 'E_WARNING';
            break;

        case E_USER_WARNING:
            $reponse = 'E_USER_WARNING';
            break;

        case E_ERROR:
            $reponse = 'E_ERROR';
            break;

        case E_USER_ERROR:
            $reponse = 'E_USER_ERROR';
            break;
    }
    echo "<br />Errno: [$errno]; Type: [$reponse]<br />";
    echo "<br />Error on line [$errline] in file [$errfile]<br />";
    echo "<br />Error: ". $errstr . "<br />";
}

set_error_handler("errorHandler"); 

?>