目次

エラーハンドラー - Whoops

Version 2.7 (MIT License)

y2sunlight 2020-03-18

定番ライブラリー に戻る

関連記事

リンク

Code-Prettify

テストプログラムの所在

{Project Folder}\test\

Whoopsについて

どんなプログラム開発にも集約例外ハンドラーは必要です。それは、いわゆる Uncaught Exception Handlerとも呼ばれ、誰にも補足されなかった例外を処理するハンドラーのことです。この集約例外ハンドラーのお陰で、開発時の問題の早期発見や、運用時の例外発生時のログ収集が可能になります。

Whoopsは、PHPのエラーハンドラーフレームワークで、非常に優れたエラーインターフェイスを提供してくれます。Whoopsのお陰で、PHPが本来提供しているUncaught Exception Handler用の set_exception_handler() を書かなくても済みます。本当に pretty cool な存在です。

Whoopsは、Laravel5.5以上には既に組み込まれており、CakePHP、Zend Framework、FuelPHP、Phalcon、Slimなどに統合する方法はそれぞれのコミュニティで手順が公開されており、PHPのデバッグツールとしてのWhoopsの選定に関しては異論の余地がありません。


インストール

composer require filp/whoops
Using version ^2.7 for filp/whoops
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing filp/whoops (2.7.1): Downloading (100%)
filp/whoops suggests installing symfony/var-dumper (Pretty print complex values better with var-dumper available)
filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses)
Writing lock file
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
Note:
Eclipse起動中にパッケージを取得した場合は、プロジェクト・エクスプローラー内の[プロジェクト(apricote)]を右クリックして[リフレッシュ]を選択して下さい。また、新しく取得したパッケージのインテリセンスが有効にならない場合は、プロジェクトのビルトまたはクリーン&ビルドを行ってビルドリストの更新を行って下さい。

パッケージの取得が終わると composer.jsonrequire に以下が追加されます。

composer.json
{
    "require": {
        "filp/whoops": "^2.7"
    }
}


テストプログラム

パッケージのテストフォルダ(test\)に、テスト用のコード(whoops.php)を作成し実行します。この例では、DEBUG_MODEtrue の場合はデバッグ用の PrettyPageHandler()が、false の場合は本番用のカスタムハンドラーが呼び出されます。PrettyPageHandler() は、例外や環境変数などの障害の切り分けに必要な多くの情報を綺麗に整形して表示してくれます。詳細はコード内のコメントを参照して下さい。

whoops.php
<?php
require __DIR__.'/../vendor/autoload.php';
 
// デバッグモード有効
const DEBUG_MODE = true;
 
// 本番モードの例外集約ハンドラーの定義
$UncaughtExceptionHandler = function ($exception, $inspector, $run)
{
    // エラーログの出力
    // Log::error($exception->getMessage());
 
    // エラ画面の表示
    var_dump($exception->getMessage());
 
    return Whoops\Handler\Handler::DONE;
};
 
// エラーハンドラーをデバッグモードと本番モードで切り替える
$whoops = new \Whoops\Run;
if(DEBUG_MODE)
{
    $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
}
else
{
    $whoops->pushHandler($UncaughtExceptionHandler);
}
$whoops->register();
 
// 例外の発生!!
throw new Exception("Whoops!!");

実行結果

デバッグモードの表示( DEBUG_MODE = true ) - PrettyPageHandler()


本番モードの表示( DEBUG_MODE = false ) - カスタムハンドラー

D:\usr\ws2019\apricot\test\whoops.php:10:string 'Whoops!!' (length=8)