Ticket #574 (closed バグ指摘: 既出)
send_err_mailがSC_Utils_Exが読み込まれる前に呼ばれる事がある。
| Reported by: | miningbrownie | Owned by: | somebody |
|---|---|---|---|
| Priority: | 中 | Milestone: | EC-CUBE2.5.0alpha |
| Component: | その他 | Version: | 2.4.1 |
| Keywords: | require_base | Cc: | |
| 修正済み: |
Description
include/module.incを読み込んだときに61行目SC_Query->getColでエラーがあると
send_err_mailが呼ばれるのですが、この段階ではまだ、SC_Utils_Exが読まれてないので、
Fatal Errorになってしまいます。
InnoDBのログファイルに何かしら問題があるとSELECT出来なくなるので、SELECT FROM dtb_module でまずエラーが発生します。 データベース系のエラーなので、仕方がないような気もしますが、出来ればClass not Foundではなく、データベースでエラーが出てますよと出せたら良いなと思います。
SC_Utils_Exを他のクラスに依存させず、先に読み込ませるよう変更するのはいかがでしょうか?
try{
throw new Exception;
}catch(Exception $e){
echo $e->getTraceAsString();
}
で無理やり出したStackTrace張っておきます。
#0 /srv/www/data/class/SC_DbConn.php(138): SC_DbConn->send_err_mail(Object(DB_Error), 'SELECT module_c...')
#1 /srv/www/data/class/SC_Query.php(434): SC_DbConn->getCol('SELECT module_c...', 'module_code', Array)
#2 /srv/www/data/include/module.inc(61): SC_Query->getCol('dtb_module', 'module_code')
#3 /srv/www/data/require_base.php(45): require_once('/srv/www/data/i...')
#4 /srv/www/htdocs/require.php(26): require_once('/srv/www/data/r...')
#5 /srv/www/htdocs/index.php(24): require_once('/srv/www/htdocs...')
#6 {main}
Fatal error: Class 'SC_Utils_Ex' not found in /srv/www/data/class/SC_DbConn.php on line 218
opensuse11.1 php5.2.11 mysql 5.0.67
Change History
Note: See
TracTickets for help on using
tickets.

#573 とも関連すると思われますが, #567 でエラーハンドリングの修正を試みています.
エラー画面を表示させる際にも, DB 接続を行うのはナンセンスだと思いますので, set_error_handler で DB 接続に伴わないエラー画面を用意して, DB エラーは trigger_error によってハンドリングするのが良いかなぁと思っています.
もちろん, SC_Utils_Ex は他のクラスに依存しないことも重要だと思います.