Skip to content

Latest commit

 

History

History
71 lines (43 loc) · 4.42 KB

error.md

File metadata and controls

71 lines (43 loc) · 4.42 KB

導入

BEARのエラーハンドリングはPandaエラーハンドラーパッケージを利用しています。

デバック時にエラーが発生すると、詳細なバックトレースエラーの詳細な画面が出力されます。AJAXの場合はfirePHPを用いてfieBugコンソールにエラーが表示されます。

エラー出力

重要度やモードによって様々なところに出力されます。

  • (開発時)FireBUGコンソール(FireFox + FireBug + FirePHP)
  • (開発時)画面上にトレースを伴う大きな表示
  • (開発時)右上のBEARバッジの色とtooltip
  • apacheエラーログ(すべてのエラー)

開発モード

Panda(開発モード)ではエラーはアプリケーションのコードによるものか、それ以外かによって扱いが異なります。

Warning以上のエラーが出たときに、アプリケーションのコードで発生したときは大きく画面表示が出ますが、アプリケーション以外のフレームワークやライブラリでWarningが発生したときは右上のBEARバッジの表示がかわります。

モードによる違い

debugモードかliveモードでハンドリングが変わります。

debug 例外ハンドリング エラーハンドリング
on(dev) Panda Panda
off(live,prod) Panda PHP (PHP off)

liveモードではパフォーマンスのためエラーハンドリングは原則行いません。 devモードでエラーハンドリングを行ってるときは設定エラーレベルを無視して全てのエラーに対して処理します。liveモードのエラー設定はアプリケーションが責任を持ちます。すなわちエラーレベルやapache/syslogどちらに表示するかなどphp.ini/.htaccessfで設定された値が使われます。

開発モード(Panda)では全てのエラーをerror_log(Apacheでのエラー出力)します。同時にFirePHPでアプリケーション内のエラーと外のエラーを分けてFireBUGコンソールに出力しています。

トラブルシューティング

Debugモードなら動作するのに、Liveモードでは実行できない事がある原因の一つにPHPのE_RECOVERABLE_ERRORがあります

E_RECOVERABLE_ERROR

キャッチできる致命的なエラー。危険なエラーが発生したが、 エンジンが不安定な状態になるほどではないことを表す。 ユーザ定義のハンドラでエラーがキャッチされなかった場合は、E_ERRORとして異常終了する。 http://php.net/manual/ja/errorfunc.constants.php

このエラーはエラーハンドラーがない時は異常終了します。画面表示は行われずFatalエラーと同じように画面に何も表示されません。(エラー出力は行われてるのでapacheのログなどで発見できるはずです)

このエラーはライブラリ/BEARがarrayのタイプヒンティングで受けている引数をbooleanやemptyで渡した時に発生します。例えば以下の$configをnullで渡せばライブでは全く動かなくて、開発モードでは動作する状態になってしまいます。

(※エラーハンドラーが原因で動かないのではなくて、エラーハンドラーがあるから開発モードで動いていたことに注意してください。)

BEAR_Main::run($class, array $config);

エラーハンドラーのデタッチ

開発モードでPandaを使わないようにするには以下のようにApp.php等でrestore_error_handler();を加えます。例外ハンドラーも同様。

BEAR::init($app); // ここでアタッチされている
restore_error_handler(); //あるいは特定ページで

エラーハンドラーのアタッチ

アプリケーション要求で独自のエラーハンドラーが必要な時は作成してBEAR::init()の後にset_error_handler()でセットします。

Pandaマニュアル

PandaはFatalエラーをキャッチして画面表示する設定や、特定HTTPコードを簡単に出力する機能、HTML5専用のオンラインエディターAceなどの機能があります。詳しくはPandaのマニュアルやサンプルソースをご覧ください。

http://code.google.com/p/panda-project/