KCatch.pm - warn や die を捕捉して“Internal Server Error”発生を回避します
use KCatch; print "Content-Type: text/html\n\n"; warn; die;
1ST STEP) KCatch.pm を実行するスクリプトの置いてあるディレクトリ(または @INC)にアップロードしておく 2ND STEP) スクリプトの冒頭に“use KCatch;”の1行を挿入する(#!/usr/local/bin/perl の次の行がベスト) 3RD STEP) スクリプトにバグが見つかるか、エラーが起きれば、KCatch.pm が内容をブラウザに表示してくれます
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 が既に読み込まれている場合のみ有効です。
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 に対応! 出力テンプレートの分離、日本語コード変換に対応
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
Copyright 1999-2000 Kawasaki Yusuke <u-suke [at] kawa.net>