Ticket #567 (closed 改善提案: 修正済)
エラーハンドリングの修正及び抽象化
Reported by: | nanasess | Owned by: | nanasess |
---|---|---|---|
Priority: | 低 | Milestone: | EC-CUBE2.11.1 |
Component: | フロント | Version: | 2.4.1 |
Keywords: | Cc: | ||
修正済み: | yes |
Description
EC-CUBE でエラー画面を表示する場合 SC_Utils::sfDispError() 関数を使用している.
しかし, この関数は, ユーティリティクラスの中で, page パッケージのクラスを呼び出しており, 良い実装とは言えない. また, この関数は内部で exit を呼んでおり, PHPUnit などのユニットテストを実行しようとした場合, スクリプトが停止してしまう.
また, この関数内で呼ばれるエラーページは, 表示する際に DB アクセスを伴う.
本来であれば, set_error_handler() 関数を使用してエラーページの表示を定義し, エラーの出力は trigger_error() 関数で行うのが望ましい.
特に, DB 接続や SQL エラーの場合は, エラーページを表示するまで PHP の実行を停止しない方が良いと思われる. 現在は, SC_DbConn::send_err_mail() 関数が呼ばれ, PHP の実行は停止してしまう.
また, エラーの内容については, デバックモードの場合は画面に表示し, 運用時はログに出力するのが望ましい.
Change History
comment:2 Changed 13 years ago by nanasess
- Status changed from new to assigned
- Milestone changed from EC-CUBE2.5.0 to EC-CUBE2.4.3
r18500 で version-2_4-dev へコミット. set_error_handler を定義し, SC_DbConn のエラーハンドリングを trigger_error を使用するように修正
comment:3 Changed 13 years ago by nanasess
r18538 で comu-ver2 へコミット. 問題なければ, version-2_4 にもマージしようと思います.
comment:4 Changed 13 years ago by kajiwara
- Milestone changed from EC-CUBE2.4.3 to EC-CUBE2.4.4
こちらですが、エラー処理の根幹の部分であり、もう少し確認が必要かと思いますので、次期バージョンにマイルストーンを変更させていただきたいと思います。
申し訳ございませんが、よろしくお願いいたします。
comment:5 Changed 13 years ago by nanasess
- Milestone changed from EC-CUBE2.4.4 to EC-CUBE2.5.0
影響が大きそうですので、 milestone:EC-CUBE2.5.0 へ変更します
comment:6 follow-ups: ↓ 11 ↓ 14 Changed 13 years ago by nanasess
r18500 の変更が原因で, インストーラのDB初期化時に停止してしまう環境がある模様.
- --enable-zend-multibyte かつ mbstring.encoding_translation = on の環境が怪しい
合わせてインストーラの修正も必要と思われる.
comment:8 Changed 13 years ago by nanasess
r18796 にて, エラーの詳細を LOG_PATH へ出力するよう修正しました. これで随分デバックしやすくなるかと思います.
comment:10 Changed 13 years ago by nanasess
r18806 PHPエラーが発生した場合にも data/logs/site.log へエラーログを出力するよう修正しました
comment:11 in reply to: ↑ 6 Changed 12 years ago by nanasess
- Milestone changed from EC-CUBE2.5.0beta to EC-CUBE2.5.1(仮)
comment:14 in reply to: ↑ 6 Changed 12 years ago by nanasess
- 修正済み set
- Milestone changed from EC-CUBE2.11.2 to EC-CUBE2.11.1
comment:15 Changed 12 years ago by kajiwara
- Status changed from assigned to closed
- Resolution set to 修正済
ADOdb の ADODB_Error_Handler() 関数は, set_error_handler() 関数にて定義されたユーザーハンドラ関数の定義に準拠していない.
エラー番号の箇所が RDBMS 種別だったりめちゃくちゃ...
ADOdb のエラーハンドリングを再定義する必要がありそう.