HomePage講座     Yukiの休息所
 Yukiの休息所(趣味の部屋)
 ホームページ講座
 CGI活用講座
次の項目へ>>
<<前の項目へ

 CGIとPerlの知識を蓄えよう

 CGI活用講座、第7回は、作成編です。

 CGIはHTMLの知識が無いと、扱えない物と思ってください、 HTMLをPerlで記述すると思っていただいて良いと思います。
 使用ソフトは、TeraPadとFFFTPのみ、

 その他、必要な物は、CGI&Perlが使えるサーバーですね。

 出来れば、自宅にサーバ環境を構築して、Perlをインストールし、 ローカルでテスト出来る環境が望ましい。
 
 では、CGI活用講座第7回の開始です。

    
 CGI,活用講座、第7回 
 ダウンロード&テストは、 http://pc-sup.com/sub/index.html」、 旅の思いで写真集「当講座の教材Pageです」
 CGI活用講座→第7回に進んでください。
 
 前回の予告どおりに、エラー処理を含めて、 最大保持数、最大表示数、投稿時間の記録、を出来るようにしました。
 
 一度に表示出来る件数は、5件に設定、保持するログ数は50に設定、 URL以外の未入力にも対応、後は、タグに対応する事、ログの削除機能、 レスをつける機能くらいですか?

 次のログを表示する機能も必要ですね。

 先の機能はこれくらいで、CGIファイルを説明します。















 CGIファイル名「katuyou8.cgi」

 今回は、コメントをかなり増やしましたので、やっている事は判ると思います。

初期設定

 CGI.pm及びjcode.plの使用宣言

 ログ保存ファイル名、保存ファイル数、表示ファイル数を設定します。

 サーバから、現在時刻を読み出して、ログに記録します。

 $yearは年ですが、+1900で、年を西暦にあわせます。
 sprintfは、十進数の数値を文字列に変換するコマンドです。

 年・月・日・時・分を組み合わせて、時刻表示を整えます。

 出力開始

 ここから暫らくは前回と同じです

 CGIのヘッダー出力

 HTMLのヘッダー出力

 入力欄

 36行目から、print <<"end"分以下、 タブを使わずに、ベタ打ちにする事。

 表題を「簡易表示板Ver1」に変更しました。

 CGIファイル名を「7」に変更、その他変更なし。
 
 data処理

 お名前部分をチェックして、ミス送信をチェックしています。

 お名前が無いログを記録しない為の処置で、読み出しのみ実施します。

 出力終了

 こちらが、正常終了時のフッターです。

 ここからサブルーチン

 sub data書込

 ログの保存サブルーチンです。

 data取り出し

 サーバから、各変数に読み出します。
 
 日本語code変換

 日本語ドメインとかもありますから、総てに、日本語コード変換を設定しています。

 入力チェック

 入力チェックを加えました、URL以外に入力不備をチェックし、エラーにしました。

 ファイルオープン

 この書式は、初めて知りました。
 !は否定のはず、開けなければエラー表示ですか、これは便利。

 <IN>はファイルハンドルを利用して、全文コピーできます。

 Record数の取り出しも変わってますね。
 此処の変換は、コメント内に改行が入ったままだと、Recordが求まらない為の処理。

 "<>"を区切り文字に使用、 KETWEBさんの真似です、しかしこれは便利だ。

 unshiftは、先頭に挿入です、これなら逆順処理が不用になる。

 ログの書き込み処理、この場合全文上書き保存ですが、追記用に開く事も可能。
 sub data表示

 ここでも開いて読み込んで直ぐに閉じてます。

 処理の競合を避ける為にファイルを開いたままにはしません、 いずれ、ファイルロックが必要になるでしょう。


 ファイル数など常時変化する物として、対応を考える必要が有りますね。

 ここでは、現在時刻を同時に記録するようにしています。
 書き込み要求があってから時刻を読み出しますから、大丈夫でしょう。

 最大表示数で、表示を打ち切る処理。
 { last }が、打ち切り命令です。

 ログの表示部分、必要回数繰り返し表示になりますね。
 [ } ]の数に注意しましょう。
 foreachと、subで、2つ並びます。
 エラー処理

 $_[0]で引数を受け取り、表示して強制終了。
 HTMLフッターを出力して、exitで強制終了させてます。
 
   毎回、同じような説明文になりますが、繰り返しが大事なので、 もう少しお付き合いくださいね。
   
   
 CGI活用講座、第7回を終了します。