0

Why is an include error echoed four times?

Does the system attempts 4 times to "open stream"?

I did :

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"); 

Result :

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 に答える