CGIの設置に挑戦していて、いちばん多く遭遇することになるエラーが「実行エラー」ですが、転送モード、Perlのパスなどの基本的な部分をワザと間違えない限り、その原因のほとんどは単純な「書き換えミス」です。
ここでは、そんな「書き換えミス」のチェック方法をいくつか紹介します。
KENT WEBさんに、オンラインで文法チェックができる素晴らしいCGI「Perl Checker」というのがあります。
これを、簡単に使えるようにちょこっと改造したものの再配布許可を戴きましたので、ここに置いておきます。
【設置法】
やることは2つだけです。解凍して出て来た「pcheck.cgi」を、
- /cgi-bin/ディレクトリにテキスト(アスキー)モードで転送し、
- パーミッション(属性)を[755]に設定する
- (@niftyなど、Perlのパスが「/usr/local/bin/perl」であるサーバでは、スクリプトを書き換える作業は必要ありません)
【使用法】
ブラウザの URL欄からpcheck.cgiを、「?」に続けて
チェックしたいCGIファイル名を指定して呼び出します。(例1:pcheck.cgiと同じディレクトリにある「test.cgi」をチェック)
http://hpcgi?.nifty.com/****/pcheck.cgi?test.cgi
(例2:/cgi-bin/count/ディレクトリにある「test.cgi」をチェック)
http://hpcgi?.nifty.com/****/pcheck.cgi?count/test.cgiすると、チェック結果がブラウザに表示されます。
文法チェックの結果は以下のとおりです。
(syntax OK と出力されれば文法上正しいことになります)
count/test.cgi syntax OKと、「syntax OK」が出れば、「実行エラー」の原因が他にあると判り、
文法チェックの結果は以下のとおりです。
(syntax OK と出力されれば文法上正しいことになります)
syntax error at test.cgi line 8, near "("
test.cgi had compilation errors.と、なにかエラーメッセージが出れば、Perlの文法として、書き換えミスをやらかしてることが判ります。
例えばこのメッセージからは、8行目の"("の前後で、何かが抜けてるか余計かという単純なミスのように見えます。【応用例】
「pcheck.cgi?」部分をIMEなどに単語登録しておくと便利です。
例えば、
http://hpcgi?.nifty.com/****/count/test.cgi
このCGIが「実行エラー」になったらカーソルを「count」の前まで移動して「pcheck.cgi?」を挿入
http://hpcgi?.nifty.com/****/pcheck.cgi?count/test.cgi
こんな感じで、今後、様々なCGIを導入する時にも汎用的に使えることでしょう。【注意】
可能性は低いのですが、仮にパスワード項目近くにエラーがあると、
文法チェックの結果は以下のとおりです。
(syntax OK と出力されれば文法上正しいことになります)
String found where operator expected at test.cgi line 28, near "$pass '0123'"
このようにパスワードが筒抜けになる場合があります。
こんな時は他の人からもパスワードが見られる可能性がありますので、エラーの修正と共に、速やかにパスワードも変更しておく必要があります。
こちらのページで、自分のパソコンにperl.exeとCopalのインストールが済んでいれば、ネットに接続する前に、自分のパソコンの中だけで、簡単に文法チェックが出来ます。
例えばよくあるアイコン式掲示板のアイコン部分を自分用に書き換えた時、
@icon = ('いぬ','さる','きじ'); この中の「'」ひとつ、「,」ひとつが抜けても文法エラーになるものですが、こんな時は書き換えた部分の1行だけ(Perlでの1行とは「;」まで)を、Copalのエディット画面に貼り付けて、「実行」ボタンを押すと・・・
と、何も出ません(わははは)
いや、これでいいのです。
ここでは「@icon」変数にリストを代入してるだけで、何かを表示する命令を出してるわけじゃないので、「空白」こそが「正常終了」の証しなのです。
ではここで仮に、「,」をひとつ抜かしてみると・・・ほーら、こんな風に、エラーメッセージと共に、どの辺でエラーが出ているのかを教えてくれるのです。
また、いろいろいじってるうちに、「何処を書き換えたか忘れちゃったよ〜」というような場合には、例えばKENTさんのCGIならば、
#==========#
# 設定項目 #
#==========#
から
#==========#
# 設定完了 #
#==========#までの設定項目部分のすべてをコピーして渡してもいいでしょう。
以上ですが、ここで「文法エラー」が特に出ないのに、「実行エラー」が出る場合は、こちらに戻って、Perlへのパス、転送モードなどをもう一度チェックするといいでしょう。
さあこれで、「txtにしてアップしましたので見て下さい」と赤ペン先生よろしくサポーターの先生方の手を煩わせなくても、自力で書き換えミスを潰すことができますよね(^_^)v。(たぶん)