Skip to content

Latest commit

 

History

History
72 lines (43 loc) · 4.41 KB

error.wiki

File metadata and controls

72 lines (43 loc) · 4.41 KB

  1. summary エラー

Table of Contents

導入

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マニュアル

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

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