3

私は大規模なサードパーティの php ソフトウェアを使用していますが、これには多くのバグがあり、修正しようとしています。ただし、これを行うのは非常に困難です。これは、@ を使用して多くのエラー抑制が行われているためです。たとえば@include 'brokenfile.php';、php はエラーを表示せずに終了します。そのため、何も表示されない空白の画面しか表示されません。「抑制」されているにもかかわらず、phpにエラーを表示させるにはどうすればよいですか?

4

4 に答える 4

5

デバッグのためにオペレーターをscream無効にするという拡張機能があります@

マニュアルから:

悲鳴の拡張は、すべてのエラーが報告されるように、サイレンシング エラー制御オペレーターを無効にする可能性を提供します。この機能は、ini 設定によって制御されます。

拡張機能をインストールしてから、php.ini で有効にします。

scream.enabled = On    

別:

この機能は、最近の xdebug バージョンでも利用できます。xdebug をインストールして設定する必要があります

xdebug.scream = On

php.iniで

于 2013-07-05T15:20:08.850 に答える
1

小さなシェル コマンドを使用して、コードからすべての "@" を再帰的に削除することができます。

find . -type f | xargs perl -pi -e 's/^@|(\s)@/$1/g'

または、更新された各ファイルのバックアップを作成できます。

find . -type f | xargs perl -pi.bkp -e 's/^@|(\s)@/$1/g'
于 2013-07-05T15:37:12.723 に答える
0

これを使って :

<?php

function exception_error_handler($errno, $errstr, $errfile, $errline )
{
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}

set_error_handler("exception_error_handler");

function catchException($e)
{
    if (error_reporting() === 0)
    {
        return;
    }

    // Do some stuff
}

set_exception_handler('catchException');

?>

「set_error_handler() でカスタム エラー ハンドラー関数を設定した場合、それは引き続き呼び出されますが、このカスタム エラー ハンドラーは error_reporting() を呼び出すことができます (またそうする必要があります)。エラーをトリガーした呼び出しの前に@。」

参照 :エラー制御演算子

于 2013-07-05T15:22:48.430 に答える
0

クイック&ダーティでハッキーなソリューション:プロジェクト全体に対して検索と置換を実行し、それらの前に空のスペースがあるすべての @ を単純に削除できます。Netbeans では、Ctrl+H. 検索するパターンは "@" (空白とアットマーク) です。

于 2013-07-05T15:22:58.060 に答える