NAME

KCatch.pm - warn や die を捕捉して“Internal Server Error”発生を回避します


SYNOPSIS

    use KCatch;
    print "Content-Type: text/html\n\n";
    warn;
    die;


DESCRIPTION

    1ST STEP) KCatch.pm を実行するスクリプトの置いてあるディレクトリ(または @INC)にアップロードしておく
    2ND STEP) スクリプトの冒頭に“use KCatch;”の1行を挿入する(#!/usr/local/bin/perl の次の行がベスト)
    3RD STEP) スクリプトにバグが見つかるか、エラーが起きれば、KCatch.pm が内容をブラウザに表示してくれます


OPTIONS

    use KCatch qw( [OPTIONS] );

何もオプションを指定しないで KCatch を use した場合、 KCatch は環境変数を確認して CGI 実行中なのか、コマンドラインから 実行しているのかを自動判別し、HTML または plain text で エラー内容を出力します。 使用可能なオプションは以下の通り:

    use KCatch qw( plain );             # 当初の書き方
    use KCatch qw( mode=plain );        # 新しい書き方

CGI を自動判別せずに、強制的に plain text で出力します。 HTTP ヘッダも出力されません。 コマンドラインからの実行時に指定します。

    use KCatch qw( html );              # 当初の書き方
    use KCatch qw( mode=html );         # 新しい書き方

CGI を自動判別せずに、強制的に HTML で出力します。 HTTP ヘッダは出力されます。 スクリプト側で HTTP ヘッダを出力済(HTML 表示中)でも 同じように表示されます。

    use KCatch qw( source );

デバッグ用に、warn や die の発生した行のソースコードも表示します。
(注意:一般ユーザにもコードが見えてしまうため、セキュリティ上の 問題に生じる可能性もあります。デバッグ完了後には外しましょう)

    use KCatch qw( stderr );

エラー情報を STDERR にも吐き出します。 CGI の場合は普通、/usr/local/apache/logs/error_log に書き込まれます。

    use KCatch qw( execdata );__DATA__

KCatch.pm を呼び出した元ソースファイルの、__DATA__ トークン後のコードを 実行します。 use KCatch した直後に __DATA__ トークンを置くのが良いです。 このオプションは極めて強力で、ほぼ全てのエラーを捕捉することが出来ます。 俗称「救世主」オプションといいます。 CGI 開発時にはぜひお試しあれ! (特に use KCatch しているソース自身にある文法エラーの捕捉に有効です)

    use KCatch qw( jcode=sjis );
    use KCatch qw( jcode=euc );
    use KCatch qw( jcode=jis );

日本語の文字化けを防ぐために、出力字の文字コードを指定できます。 ただし、このオプションは jcode.pl が既に読み込まれている場合のみ有効です。


VERSIONS

    1999/11/05 v1.02 最初のリリース
    1999/11/23 v1.03 use・require 実行中のエラーに対応
    2000/04/25 v1.04 バグ修正:"Use of uninitialized" $ENV{GATEWAY_INTERFACE}
    2000/05/03 v1.05 "use KCatch qw( source );" などのオプションを追加
    2000/05/05 v1.06 バグ修正: undefined $ENV{REQUEST_URI}
    2000/08/04 v1.07 "stderr" オプション対応
    2000/10/27 v1.08 まだ uninitialized values があったので外した
    2000/12/09 v1.10 救世主オプション execdata に対応!
                     出力テンプレートの分離、日本語コード変換に対応


SITES

    http://www.kawa.net/works/perl/catch/
    http://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html
    http://www.layer-8.com/sce/smp_detail.php3?argCatId=7&argSmpId=3


AUTHOR

Copyright 1999-2000 Kawasaki Yusuke <u-suke [at] kawa.net>