3

PHP アプリケーションに含まれるファイルのエラー報告レベルを変更する (E_STRICT をオフにする) ことはできますincluderequire_once?

コードで発生する厳密な通知を確認できるようにしたいのですが、PEAR MDB2 を使用しており、E_STRICT をオンにすると、そのコードから警告のページが表示されます。

error_reporting.htaccess ファイルを使用してディレクトリごとに変更できることは知っていますが、含まれているファイルでは機能しないと思います。pearフォルダに入れてみましたが、何もしませんでした。

4

4 に答える 4

5

カスタム エラー ハンドラを定義し$errfile、引数を使用してエラーの原因を特定できます。パスが含まれているライブラリのパスと一致する場合は、エラーを抑制します。それ以外の場合は、PHP のエラー報告に渡します。

私が見る限り、これはライブラリによって引き起こされたすべての警告と通知をキャッチするはずです。

バックトレースが必要ないため、多くのトリガーされたメッセージに対して十分に高速である可能性があります。

これはテストされていませんが、マニュアルの例に基づいて動作するはずです:

<?php
// error handler function
function myErrorHandler($errno, $errstr, $errfile, $errline)
{

    $library_path = "/path/to/library";
    if (substr($errfile,0,strlen($library_path))==$library_path)
    /* Don't execute PHP internal error handler */
     return true;
    else
    /* execute PHP internal error handler */
     return false;
}
于 2010-02-23T16:49:42.570 に答える
5

error_reportingを使用して、実行時に設定を動的に変更できますini_set()。次に例を示します。

// your running code using the default error reporting setting

// set the error reporting level for your library calls
ini_set('error_reporting', E_NOTICE);

// make some library calls

// reset the error reporting level back to strict
ini_set('error_reporting', E_ALL & E_STRICT);

// more of your code
于 2010-02-23T15:10:35.563 に答える
0

__call非常に汚いハックとして、すべてのクラスを拡張し、魔法のメソッドに頼ることができます。これは私の頭から離れているので、タイプミス/ブレインファートのために私を撃たないでください:

クラスMyDb{
    保護された$pearDb; //これをコンストラクターでインスタンス化します。
    パブリック関数__call(){
        $ oldReporting = error_reporting(〜E_STRICT);
        $ result = call_user_func_array(array($ this-> pearDb、__FUNCTION__)、func_get_args());
        error_reporting($ oldReporting);
        $resultを返します。
    }
}

もっと詳しく教えてほしい場合はお知らせください。

于 2010-02-23T16:33:21.327 に答える
0

いいえ、できません。あります

ini_set('error_reporting', E_NOTICE);

ただし、他の/ライブラリファイルで定義されている場合でも、これはすべての関数/メソッド呼び出しに影響します。

于 2010-02-23T15:13:29.380 に答える