516


204

私はPHPでのプログラミングは非常にイライラすると思います。 かなり頻繁にスクリプトを実行して空白の画面に戻ります。 エラーメッセージは表示されず、画面が空になります。 原因は、単純な構文エラー(角かっこが間違っている、セミコロンがない)、失敗した関数呼び出し、またはその他の原因が考えられます。

何が悪かったのかを把握するのは非常に困難です。 私はコードをコメントアウトしたり、いたるところに "echo"ステートメントを入力したりします。 問題を絞り込もうとしています。 しかし、もっと良い方法があるはずですよね。

それでは、PHPにJavaのような有用なエラーメッセージを生成させる方法はありますか? 誰かが良いPHPのデバッグのヒント、ツール、テクニックを推薦できますか?

29 Answer


464


構文エラーの場合は、php.iniでエラー表示を有効にする必要があります。 「顧客」にエラーメッセージが表示されたくないため、デフォルトではこれらは無効になっています。 2つのディレクティブ error_reporting`と display_errors`についてはPHPドキュメントのhttp://php.net/manual/en/errorfunc.configuration.php#ini.error-reporting[Check this page]をご覧ください。 `display_errors`はおそらくあなたが変更したいものです。 php.iniを変更できない場合は、.htaccessファイルに次の行を追加することもできます。

php_flag  display_errors        on
php_value error_reporting       2039

あなたのPHPのバージョンで `error_reporting`にすべてのエラーを取得するためにE_ALLの値(Gumboによって言及されているように)を使うことを検討することができます。 http://docs.php.net/manual/en/errorfunc.constants.php [その他の情報]

その他の3つの項目:(1)エラーログファイルはすべてのエラーが記録されているので確認できます(ログ記録が無効になっていない限り)。 (2)次の2行を追加すると、構文エラーではないエラーをデバッグするのに役立ちます。

error_reporting(-1);
ini_set('display_errors', 'On');

(3)もう1つの方法は、入力時にエラーをチェックするエディタ(http://www.nusphere.com/products/phped.htm [PhpEd]など)を使用することです。 PhpEdには、より詳細な情報を提供できるデバッガも付属しています。 (PhpEdデバッガはxdebugと非常によく似ており、エディタに直接統合されているので、1つのプログラムを使ってすべてのことを実行できます。)

Cartmanのhttp://www.ibm.com/developerworks/library/os-debug/[link]も非常に優れています。http://www.ibm.com/developerworks/library/os-debug/


424


以下はすべてのエラーを有効にします。

ini_set( 'display_startup_errors'、1); ini_set( 'display_errors'、1); error_reporting(-1);

次のリンクも参照してください。


53


デバッグしたいファイルに次の行を含めることができます。

error_reporting(E_ALL); ini_set( 'display_errors'、 '1');

これはphp.iniのデフォルト設定を上書きします。これはPHPにエラーをログに報告させるだけです。


47


PHPの設定

https://stackoverflow.com/questions/8684609/dude-wheres-my-php-ini [php.ini]に2エントリがエラーの出力を指示します。

  1. * http://il1.php.net/manual/en/errorfunc.configuration.php#ini.display-errors [display_errors] *

  2. * http://il1.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting [error_reporting] *

    • production *では、 display_errors`は通常 Off`に設定されています(プロダクションサイトでのエラー表示は一般に望ましくないので、これは良いことです)。

しかし、* development では、エラーが表示されるように `On`に設定する必要があります。 *チェック

(PHP 5.3以降の)error_reportingはデフォルトでE_ALLに設定されています。 よくわからないときは、エラーをすべて表示するためにE_ALLに設定してください。 チェック

おっ、おっ! チェックなし! php.iniを変更できません!

残念です。 通常、共有ホストはphp.iniファイルの変更を許可していないため、そのオプションは残念ながら利用できません。 しかし、恐れないでください。 他の選択肢もあります。

実行時設定

目的のスクリプトで、実行時にphp.iniエントリを変更できます。 つまり、スクリプトが実行されたときに実行されます。 甘い!

error_reporting(E_ALL);
ini_set("display_errors", "On");

この2行は、上記のようにphp.iniエントリを変更したのと同じ効果があります。 驚くばかり!

私はまだ空白のページ/ 500エラーが出ます!

つまり、スクリプトは実行されていません。 これは通常、構文エラーがあるときに起こります。

構文エラーがあると、スクリプトは実行時間に到達しません。 これは*コンパイル時*に失敗します。つまり、php.iniの値を使用することになります。変更していない場合は、エラーを表示できない可能性があります。

エラーログ

さらに、PHPはデフォルトでエラーをログに記録します。 共有ホスティングでは、それは専用のフォルダまたは問題のあるスクリプトと同じフォルダにあります。

php.iniにアクセスできる場合は、* http://il1.php.net/manual/en/errorfunc.configuration.php#ini.error-log [error_log] *エントリの下にあります。


27


" xdebug"と呼ばれる本当に便利な拡張機能があります。


22


素早い、実践的なトラブルシューティングのために、私は通常ここにここで提案する:

error_reporting(~0); ini_set('display_errors', 1);

トラブルシューティングの対象となっているスクリプトの冒頭に置かれます。 これは完璧ではありません、完璧な変種は `php.ini`でそれを有効にし、構文エラーと起動エラーを捕らえるためにPHPでエラーを記録することです。

ここに概説されている設定は、どのPHPバージョンであるかにかかわらず、厳格なものも含めてすべてのエラー、注意、警告を表示します。

考慮すべき次のこと:

  • Xdebugをインストールし、リモートデバッグを有効にします あなたが乗る。

また見なさい:


15


あなたが超クールなら、あなたは試すかもしれません:

$ test_server = $ _SERVER ['SERVER_NAME'] == "127.0.0.1" || $ _SERVER ['SERVER_NAME'] == "localhost" || substr($ _ SERVER ['SERVER_NAME']、0,3)== "192";

ini_set( 'display_errors'、$ test_server); error_reporting(E_ALL | E_STRICT);

ローカルで実行している場合にのみエラーが表示されます。 また、test_server変数を他の場所で適切な場所に使用することもできます。

スクリプトが実行される前に発生したエラーはキャッチされませんが、私が行ったエラーの99%については、それは問題ではありません。


14


これを持続させて快適にするために、php.iniファイルを編集することができます。 通常は / etc / php.ini`または / etc / php / php.ini`に保存されていますが、ホスティングプロバイダの設定ガイドラインによっては、よりローカルな php.ini`が上書きする場合もあります。 一番上の `Loaded Configuration File`の phpinfo() `ファイルをチェックして、どれが最後にロードされるかを確かめてください。

そのファイルでdisplay_errorsを検索してください。 3つのインスタンスのみがあり、そのうち2つはコメントアウトされています。

コメント解除された行を次のように変更します。

display_errors = stdout


14


ページ上部のパラメータを選択してください

error_reporting(E_ERROR | E_WARNING | E_PARSE);


12


私は Nette Tracyをお勧めします。PHPでのエラーや例外をよりよく視覚化するためです。

画像:https://i.stack.imgur.com/B1gSC.png [Nette Tracyスクリーンショット]