2012-01-15 5 views
1

私は例外にPEARのText_LanguageDetectのエラー処理を書き換える処理中だと、本当に例外で動的なデータをどうするのか分からない:PHPの例外:動的データを配置する場所はどこですか?

ここ
throw new Text_LanguageDetect_Exception(
    'Language database does not exist.', 
    Text_LanguageDetect_Exception::DB_NOT_FOUND 
); 

私は、ファイル名を含めたいですそれを開くことがしようとしたが、質問はがそれを置くためありました。

  1. Language database /path/to/file.ext does not exist.
  2. Language database "/path/to/file.ext" does not exist.
  3. Language database does not exist: /path/to/file.ext
  4. Language database does not exist: "/path/to/file.ext"

1 + 2 + 4コードでメッセージをgrepすることを容易にしながら、適切な英語の文章です。また、3 + 4では、コードでファイル名を抽出する方が簡単です。

どちらを使用すればよいですか?


もう1つの質問は次のとおりです。ファイル名はどこに書きますか?

例外メッセージを表示すると、メッセージが表示された場合、攻撃者はサーバー上のファイル構造に関する情報を攻撃者に与える可能性があります。ファイル名がなければ、デバッグするのは難しいです。

+2

プロダクションサーバーではエラーメッセージを無効にする必要があるため、攻撃者がファイル構造についての洞察を得ることはできません。コンポーネントのユーザーの誤設定を予期するコンポーネント作者の責任ではありません。私が好むメッセージについて:4.それとは別に、投票タイプの質問ではなく、それで私は推測します。 – Gordon

+3

'sprintf()'を使うと、コードをきれいに保ちながら、より簡単にデカップリングや変更を行うことができます。それに続いて、コンポーネント全体のスタイルをチェックして、常に同じようにして、学習曲線を減らしてください。例外を処理するためにAPIのユーザーにとって有用なすべての情報を提供します。 – hakre

+0

[可能なエラーメッセージを書く方法は?](http://stackoverflow.com/questions/194537/how-does-one-write-good-error-messages) – hakre

答えて

0

あなたにはわかりやすいメッセージ形式を使用する必要があります。コード内の例外メッセージに頼るのは良い習慣ではありません。それを行う必要がある場合は、おそらく例外をサブクラス化するべきです。

2番目の質問:プロダクション環境でユーザーに詳細なエラーを表示しないでください。ファイル名を問題として表示することはできません。

-1

例外をスローするときは、開発中であるかライブ中であるかをコードに伝えるenvrionment変数を持つと便利です。これは、他のシステム全体の設定が保存されている場所で設定できます。

開発に設定すると、デバッグを簡単にするエラーが出力されます。ライブに設定されていればエンドユーザーにとって役立つエラーが出力されます(まったくエラーがなく、正常に処理されます)。攻撃者となるような情報を提供する。

+0

これは彼の質問に答えません。 – Gumbo

+0

汎用ライブラリには適していません。梨はそのような倉庫です。 – hakre

関連する問題