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 は他のクラスに依存しないことも重要だと思います.