私は大規模なサードパーティの php ソフトウェアを使用していますが、これには多くのバグがあり、修正しようとしています。ただし、これを行うのは非常に困難です。これは、@ を使用して多くのエラー抑制が行われているためです。たとえば@include 'brokenfile.php';
、php はエラーを表示せずに終了します。そのため、何も表示されない空白の画面しか表示されません。「抑制」されているにもかかわらず、phpにエラーを表示させるにはどうすればよいですか?
4 に答える
デバッグのためにオペレーターをscream
無効にするという拡張機能があります@
マニュアルから:
悲鳴の拡張は、すべてのエラーが報告されるように、サイレンシング エラー制御オペレーターを無効にする可能性を提供します。この機能は、ini 設定によって制御されます。
拡張機能をインストールしてから、php.ini で有効にします。
scream.enabled = On
別:
この機能は、最近の xdebug バージョンでも利用できます。xdebug をインストールして設定する必要があります
xdebug.scream = On
php.iniで
小さなシェル コマンドを使用して、コードからすべての "@" を再帰的に削除することができます。
find . -type f | xargs perl -pi -e 's/^@|(\s)@/$1/g'
または、更新された各ファイルのバックアップを作成できます。
find . -type f | xargs perl -pi.bkp -e 's/^@|(\s)@/$1/g'
これを使って :
<?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() を呼び出すことができます (またそうする必要があります)。エラーをトリガーした呼び出しの前に@。」
参照 :エラー制御演算子
クイック&ダーティでハッキーなソリューション:プロジェクト全体に対して検索と置換を実行し、それらの前に空のスペースがあるすべての @ を単純に削除できます。Netbeans では、Ctrl+H
. 検索するパターンは "@" (空白とアットマーク) です。