2011-06-30 8 views
1

私が書いた関数は、自分の仕事をすることができない場合、例外をスローしています。生産的な環境のために、私は例外を見栄えの良いエラーページにリダイレクトすることを考えました。したがって、すべてのスクリプトの先頭に例外ハンドラset_exception_handlerを設定することを考えています。エラーページは、どのエラーが発生したかをどのように知っていますか?私はheader("Location: error.php?code=1234")のようなURLにエラーコードを入れることを考えました。開発段階では私は例外ハンドラを設定しませんでしたので、すべての例外はPHPのデフォルトエラー画面Uncugt例外に出力されます。...すべての有用な情報があります。PHP例外がカスタムエラーページにリダイレクトされました

私はExceptions in PHP - Try/Catch or set_exception_handler?を読んだことがありますが、フロントコントローラスクリプトの書き方は分かりませんし、これは多分努力していると思います。

私は正しい方法でエラーを処理するのが好きなPHP初心者ですが、正しくやっているかどうか分かりません。上記のようにしてもOKだと思いますか、他の提案がありますか?

ありがとうございました!

答えて

2

リダイレクトしないでください。例外ハンドラ関数では、その時点でエラーページを出力します(または、エラーページHTMLを含むPHPファイルをインクルードします)。 PHPヘッダー関数を使用して適切なステータスコードを設定することもできます。

編集:なぜリダイレクトしない:

  • あなたはそう、あなたのエラーページ(原因に応じて、通常は404、403、400、500または503)上の適切なHTTPステータスコードを返すようにしたいです検索エンジンのロボットはエラーのインデックスを作成しないことを知っており、クローラは壊れたページを特定でき、ブラウザはページをキャッシュしないなどのことを知ることができます。リダイレクトすると、301/302のHTTPステータスコードが返されますが、エラーメッセージは返されません。
  • 一時的なグリッチの場合に備えて、エラーが発生したページをユーザーが更新できるようにします。別のURLにリダイレクトすると、何度も更新されますが、エラーページが表示されます(そのページが表示されているため)。
+0

ありがとうございます。あなたはあなたの経験を教えてもらえますか、エラーページにリダイレクトするのは間違っていますか?私は、autorがリダイレクト方法を使用する記事[PHPでの集中エラー/例外処理](http://codeissue.com/articles/a04e000c369b101/centralized-error-exception-handling-in-php)を見つけました。 –

+0

私は答えに説明を追加しました。 –

2

真実を教えてください。この種のことを心配するのは早すぎると思います。

OOPのマスタリングに熱心なので、後であなたのためにすべてのエラー/例外をキャッチするMVCフレームワークを使用します。 symfonyを見てください。開発環境では、例外とスタックのトレースが表示されますが、実際の環境では表示されます。それは素晴らしい、カスタマイズ可能なエラーページを吐き出す。

意味:車輪を改造しないで、他の人が同様の問題をどのように解決したかを見てください。また、それらのソリューションを使用することをお勧めします(ただし、それらも同様に理解してください)。

+0

あなたの答えをありがとう!私はsymfonyから聞いたことがありますが、以前はそれをインストールしましたが、それを生産的に使用したことはありませんでした。私はホイールを再発明したくありませんが、私が取り組んでいるプロジェクトでは、それは過剰なものだと思います。それを使用しない主な理由は、まずそれを学ばなければならないということです(残念なことにそれのための時間がありません)。 –

1

あなたは説明した上で、それが ようにそれをやって大丈夫だと思います。また、他の 提案はありますか?

いいえ、これは問題ありません。発生するすべての問題にゴールデンハンマーを適用する必要はありません。一部の例外は他の例外とは異なる方法で処理する必要があります。さらに、特定の例外は、コードのある部分で別のものよりも別に処理する必要がある場合があります。私はset_exception_handlerが何らかの理由で適切に捕まえられなかった例外を処理し、より細かく処理するtry/catchを作成するという最後の手段として機能することを提案します。

+0

これを念頭に置いておきます。まず、何か問題が生じた場合に例外をスローして、すべての機能を実装しようとします。後で、すべての機能が実装されている場合は、詳細とエラー条件に注意します。ご回答有難うございます! –

+0

あなたは大歓迎です。 – webbiedave

関連する問題