★ 

インデックス

 ★
★ 

プログラムの説明

 ★

CGIスクリプトの配布とプログラミングの説明

 RSS XML
  • 玄関口
  • 占い診断
  • 萌え辞典
  • オタク遊戯
  • ネット小説
  • NEW秋華
  • CGIDL
  • CGI解説
--☆INFORMATION☆--
2017年6月6日【火】20時29分41秒
【(*´ω`*)】CGIの更新は現在無期限休止中です‥‥
2014年11月6日【木】13時47分00秒
【(*´ω`*)】確率収束診断スクリプト作りました!
2013年12月24日【火】17時47分50秒
【(*´∇`*)】最近ちょっとプログララマーに戻ってます♪
2013年11月4日【月】19時41分23秒
【(´・ω・`)】現在新しいCGIの作成は行っていません。
2013年1月7日【月】16時12分36秒
【(*´ω`*)】サイトをリニューアルしました。他も徐々に変更中です‥‥
--☆HOTLINK NOW☆--
【Kindle】電子書籍販売★秋華★
【楽天kobo】電子書籍販売★秋華★
【パブー】電子書籍販売★秋華★
CGI無料レンタルサーバ紹介
秋華エントランス

CGIスクリプト基本 [ファイル読み書き]

それではいよいよ、HTMLだけではできない事をしていきたいと思います。
とりあえず、まずはカウンタからです。
カウンタと言えば、「あなたは××人目の訪問者です。」なんて数字を表示する奴です。
方法としてはいくつかやり方があります。
HTMLで、img src= で画像の代わりにCGIファイルを指定し、CGIによって画像を出力する方法。
iframe src= で、フレーム内に画像、又はテキストで出力する方法。
他にもHTMLファイルそのものを書き変える方法などがあるが、今上げた3つは、どれも誰かが作ったスクリプトを利用すれば簡単にできるし、入門書籍にも簡単なソースは、書かれている。
だからココでは、自分でCGIを書くメリットがあるやり方を書きたいと思います。
先ほどまでに書いた、CGIでHTML出力する方法を利用し、トップページを表示し、そこにカウンタの数字を表示する方法です。
まずはトップページを表示するソースを見てみましょう。

#! /usr/local/bin/perl
print "Content-type: text/html; charset=UTF-8\n\n";
print <<END_OF_HTML;
<html>
<head>
<title>ぼくのホムペトップページ</title>
</head>
<body bgcolor="#FFDDFF">
<font color="#007777">いらっしゃいませw</font><br>
ぼくのホームページトップだよ♪
</body>
</html>
END_OF_HTML
exit;

コレがたとえば、ホームページのトップとして、いらっしゃいませw と表示した下に、あなたは、××人目の訪問者です! と言う一文をいれる事にします。
以後 body タグより前と後は省略させていただきます。
理屈としては・・・

<font color="#007777">いらっしゃいませw</font><br>
ぼくのホームページトップだよ♪

この間に入れるわけですので・・・

<font color="#007777">いらっしゃいませw</font><br>
END_OF_HTML
ここでカウンタ処理を行って、表示する命令を入れれば良い。
print <<END_OF_HTML;
ぼくのホームページトップだよ♪

一度HTML表示を終了させて、カウンタを表示する為の処理を行い、カウンタの数字を表示し、その後再び、残りのHTMLを表示する事で可能です。
しかしこれだと、HTMLの記述を後で見た時に美しくなく、なんとなくわかりにくいです。
そこでもっと簡単な方法が有ります。
変数というものを利用し、表示する方法です。
変数とは、数字や文字列を入れておく、箱のようなものだと考えてください。
Perlブログラムでは、$hensu のように、最初に $ を書いて、その後に最初に半角英、その後に数字などを使って適当に自由に作成できるものです。
たとえば $count に、今までの訪問者の人数を入れておけば、以下のように記述すれば、表示する事が可能です。

<font color="#007777">いらっしゃいませw</font><br>
あなたは、$count人目の訪問者です。<br>
ぼくのホームページトップだよ♪

これだけで表示されてしまうのですから、とても簡単です。
問題は、変数 $countに、訪問者数を入れるのに、どうしたら良いかという事です。
最終的な記述としては、たとえば訪問者数が1234人であれば、以下のように書けば、$count に 1234 を入れる事が出来ます。

$count = "1234";

これで、変数 $count は、1234とイコールです。
最終的にする事としては、訪問者数を上記のように $count に入れる事ですが、それまでには色々しなければならない事があります。
簡単に言うと、今までの訪問者数の書かれたデータファイルから、データを取り出して人数を得る。
その数字に1を足して、再びデータファイルに戻す。(書きこむ)
最後にその数字を、$count に入れる、という感じです。
しかし、最後に $count に入れる作業は、実は必要ありません。
理由は、取り出すところから $count に取り出して、それに1を足して、$count の数字をデータファイルに書き込めば問題無いからです。
では、まずはデータファイルを作成し、そこに今までの訪問者数 0 を書いて保存してから、ソースを書いて説明していきます。
データファイル名はファイル名として使えるものならなんでも良いですが、ややこしいのは避けた方が良いでしょう。
だいたい皆が利用するのが、拡張子 .log か .txt あたりでしょうか。
ただ私は、データだから .dat を今まで使ってきたので、それでさせていただきます。
今後、カウントを保存するデータファイル名は、count.dat とします。
それでは、以下ソースの記述です。

open(LOGC,"count.dat") || die "Can't Open User Access Log: $!\n";
$count=<LOGC>;
close(LOGC);
$count++;
open(LOGC,">count.dat") || die "Can't Open User Access Log: $!\n";
print LOGC "$count";
close(LOGC);

この7行を表示前に行って、HTML表示の際 $count を数字の文字列として表示すれば、そこに数字が表示されるわけです。
それでは1行ずつ説明します。
まずは・・・

open(LOGC,"count.dat") || die "Can't Open User Access Log: $!\n";

これは、開く、LOGC と言う名称で、データ引き出しとして、count.dat から。|| もしファイルが開けなかったら、Can't Open User Access Log: $!\n と表示します。
こんな感じです。
次の行が・・・

$count=<LOGC>;

これは、$countに、LOGC と言う名称で引きだしたデータを入れる。

close(LOGC);

LOGC と言う名称で開いたファイルを閉じる。
ココで大切なのは、開いたファイルは、必ず閉じなければならないって事です。

$count++;

$count に入れたデータ(ココでは 0 という数字ですね)に、1 を足す。
ちなみに・・・

$count = $count + 1;

上記でもかまいません。
読み方としては、$count に、$count に 1 足した数字を入れる、って感じです。
普通算数では、書き方は逆ですが、プログラムではこう書くのが基本です。

open(LOGC,">count.dat") || die "Can't Open User Access Log: $!\n";

開く、LOGCと言う名称で、上書きする為に、count.datファイルを。|| もしファイルが開けなかったら、Can't Open User Access Log: $!\n と表示します。
読みだしと違うのは、> がついているかいないかですね。

print LOGC "$count";

出力する、LOGC と言う名称で、$count を、って事で、$count の中の文字列を、count.datに上書きします。

close(LOGC);

LOGC と言う名称で開いたファイルを閉じる。
と、なります。
これだけで、ホームページにカウントを表示する事が可能です。
完成系を以下に書きます。

#! /usr/local/bin/perl
print "Content-type: text/html; charset=UTF-8\n\n";
open(LOGC,"count.dat") || die "Can't Open User Access Log: $!\n";
$count=<LOGC>;
close(LOGC);
$count++;
open(LOGC,">count.dat") || die "Can't Open User Access Log: $!\n";
print LOGC "$count";
close(LOGC);
print <<END_OF_HTML;
<html>
<head>
<title>ぼくのホムペトップページ</title>
</head>
<body bgcolor="#FFDDFF">
<font color="#007777">いらっしゃいませw</font><br>
あなたは$count人目の訪問者です!<br>
ぼくのホームページトップだよ♪
</body>
</html>
END_OF_HTML
exit;

ちなみに LOGC と言う名称は、変更可能です。
一般的には、IN と OUT が使われている事が多いように感じます。
die 関数は、データファイルが無かったりして、ファイルオープンに失敗した場合、直ちにスクリプトを終了して、メッセージを表示するものですので、そのまま利用して構いません。
データファイルの読み書きは、これが基本ですので、今後も必ず使う記述です。
ちなみにこの程度のデータであれば、CGIファイル自体に保存、書き変えができた記憶がなんとなくありますが、私自身忘れていますので、ココでは書けません。(汗)
さてココまでは、CGIファイルにアクセスがあり、CGIファイルが起動して、データの読み書きはあったにせよ、HTMLを表示するだけのものでした。
次は、HTMLの送信フォーム(掲示板等の書き込みや、サーチエンジンの検索など)から送られてきたデータを受け取り、それを処理する為に必要な事を説明したいと思います。
【<┃】 【┃┃】 【┃>】
このエントリーをはてなブックマークに追加
ドクダミ
Ver.5.00 CGIフリー配布サイト