|
最後に、エラー処理を組み込んで見ましょう。組みこむのは、regist.cgiです。
現状の「regist.cgi」では、エラー処理が組みこまれていないため、未記入でも動作してしまいます。そこで、メールアドレスを入力しない場合、「メールアドレスを入力してください」とエラーメッセージを出すように改造します。
■エラー処理サブルーチンを組みこむ場所
基本的に、他のサブルーチンの中でなければ、どこに書きこんでも動作します。私は、習慣として、スクリプトの一番最後にいれることが多いです。
■サブルーチン呼び出しソースコード
sub regist {
if ($FORM{'email'} eq '' ) { &error ('エラー','メールアドレスを入力してください。');
}
open (OUT,">>$data_file") || &error('オープンエラー','指定された書込みファイルが開けません。');
print OUT "$FORM{'name'},$FORM{'email'},$FORM{'rem'}\n";
close (OUT);
以下略・・・
上のソースの意味は・・・
if ($FORM{'email'} eq '' )の’’(シングルクォーテーション二つ。ダブルクォーテーションが一つではありません。まちがえないように)は「空白であれば」を意味していますので、
「もし、email欄が空白であれば、エラー処理サブルーチンに『エラー』と『メールアドレスを入力してください』という文字列を渡しなさい。」
と命令しているのです。空白でなければ、命令は無視され、data.datを開こうとします。
エラー処理サブルーチンに渡す値を変更することで、どんな場面でも使いまわしが可能です。
次のエラー処理ルーチンは、
open (OUT,">>$data_file") || &error('オープンエラー','指定された書込みファイルが開けません。');
「もし、data.datが開かなければ、エラー処理サブルーチンに、『オープンエラー』 『指定された書込みファイルが開けません。』という文字列を渡しなさい」
と命令しています。
エラー処理サブルーチンは、受け取った文字列を表示し、「exit;」命令があるので、スクリプトを終了します。
エラー処理をしていない時点では、data.datを準備していない場合、スクリプトはサーバーエラーを起こしました。これは、エラー処理サブルーチンがなかったため、処理を継続できなかったのが原因です。
今回エラー処理を付け加えたので、サーバーエラーを出すことなく、正常に処理を終了できます。
エラー処理は、通常以下の目的で使用されます。
| 設置者に対する処理 |
必要なファイルがない、設定を間違っているなどの原因でスクリプトが動作しない場合、どこが間違っているかを明確にするための用途。 |
| ユーザーに対する処理 |
ユーザー(来訪者)の、書き込みや使用に制限をかける。
フォームなどの入力項目に不備があった場合、注意を促す。 |
その他、サーバーにトラブルが発生した場合の対処などにも利用されることがあります。
エラー処理は、スクリプトを作成する上で最も重要な作業です。自分で作って、自分で利用するような場合は、設置者に対する処理は不要と考えるかもしれません。しかし、サーバーエラーが出たときに、どこに不具合があるのかを探す手段としても使えますので、習慣として、エラー処理を組み込むようお勧めします。
ファイルを用意して、パーミッションもきちんと設定したはずなのに、「ファイルがない」とメッセージが出たとすれば、ファイル処理関連のソース内にバグがあると判断できますね。単なるサーバーエラーでは、どこが悪いのか見当もつきません。
エラー処理を付け加えることで、バグ出しやバグつぶしが比較的スピーディーに行なえるようになります。
特に、ファイルを開く、データを読み込む、メールを送信するなどの基本となる処理には、必ずエラー処理を付け加えるようにしましょう。
|