0

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

系统是否尝试 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
4

1 回答 1

1

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

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

include()的文档。

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

根据包含过程的 PHP文档

在旁注中,我对您提供的自定义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"); 

?>
于 2012-07-03T21:36:28.303 回答