- summary エラー
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で渡せばライブでは全く動かなくて、開発モードでは動作する状態になってしまいます。
(※エラーハンドラーが原因で動かないのではなくて、エラーハンドラーがあるから開発モードで動いていたことに注意してください。)
開発モードでPandaを使わないようにするには以下のようにApp.php等で`restore_error_handler();`を加えます。例外ハンドラーも同様。
アプリケーション要求で独自のエラーハンドラーが必要な時は作成してBEAR::init()の後に`set_error_handler()`でセットします。
PandaはFatalエラーをキャッチして画面表示する設定や、特定HTTPコードを簡単に出力する機能、HTML5専用のオンラインエディターAceなどの機能があります。詳しくはPandaのマニュアルやサンプルソースをご覧ください。