ようやくアクセスカウンターの作成にはいります。


今日はアクセスカウンターの基本構造のようです。



何々、CD-ROMからcount.datをスクリプトと同じファイルにコピー。


はい、完了。



ブラウザをリロードするごとに数字が増えていくスクリプトを作るようだ。



では早速コーディング


-----------------------------------

#! c:/perl/bin/perl

#カウントファイルの読み込み

open(IN,"<./count.dat");

$count = <IN>;

close<IN>;

++$count;

#カウントファイルの書き込み

open(OUT,">./count.dat");

print OUT $count;

close<OUT>;


#サーバ出力

print <<END;

Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>

<head><title>あくせすかうんたー<title></head>

<body>

<p>あなたは・・・・$count番目の訪問者です。</P>

</body>

</html>

END

---------------------------------


http://127.0.0.1/tendays/3-3.cgi 実行!


げげげっ。


Internal Server Error



ってもうなれたいわい!




close<IN>;  ここは、close(IN);

++$count;

#カウントファイルの書き込み

open(OUT,">./count.dat");

print OUT $count;

close<OUT>; ここは、close(OUT)



2箇所修正。





http://127.0.0.1/tendays/3-3.cgi 再実行!



あなたは・・・・1番目の訪問者です。


リロード


あなたは・・・・1番目の訪問者です。


リロード



あれ。いくらリロードしても変わらない。


コピーしたcount.datを確認。


おいおい、読み取り専用になってるではないか。


プロパティから読み取り専用のチェックを解除。



http://127.0.0.1/tendays/3-3.cgi 再再実行!


あなたは・・・・2番目の訪問者です。

あなたは・・・・3番目の訪問者です。

あなたは・・・・4番目の訪問者です。




成功成功!


今日これでおしまい。

今日の授業は、テキストファイルを一部読みこんで表示する機能を作ります。


えっ! いつになったらアクセスカウンターを作れるですか?


どうも、アクセスカウンターを作るには、ファイルを読み込む方法を学ぶ必要があるようだ。 



千里の道も何とやらで、基礎から一歩一歩学んでいきましょう。


コーディング開始を開始する前に、CD-ROMのdiary.txtをcgiと同じフォルダにコピーする必要があるようだ。


そうかそうかこのファイルを読み込むんだな。


では、コピーもしたしコーディング開始。

----------------------------------


#! c:/perl/bin/perl


#ファイルの読み込み

open(FILE,"./diary.txt");

@data = <FILE>;

close (FILE);

#サーバ出力

print <<END;

Content-type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>ファイルの読み込み</title></head>
<body>

<p>$data[0]</p>
  <p>$data[1]</p>
  <p>$data[2]</p>

</body>
</html>

END

-------------------------


http://127.0.0.1/tendays/3-2.cgi 実行!



ここ二、三日は、ずっとじめじめしていたが、今日はどうやら晴れている。


夏の朝――夏と言ってもまだ5月だし、朝と言ってもすでにam10:00をまわっている。


僕は別にやることもなく、ただぼーっとイルカの存在理由なんぞについて考えていた。


↑のようにファイルの中身が表示される。



なるほど、ファイルをopenして、ファイルの中身をFILE中に入れる。

それを配列@dataに入れる。

ファイルをcloseする。


配列中身を、HTMLに出力する。


こんな感じ。


今回は、HTMLへの出力方法が違った。

ヒアドキュメントというらしい。


これ ↓


print <<END;


このなかHTMLタグ


END



今日のポイント


●ファイル


開く open


内容をよんだり書いたりする


閉じる close



●ファイルハンドル


open(FILE ,"./diary.txt");のFILEのこと。


これは任意の名前でよい。


ファイルの中身をよんだり、ファイルを閉じる時にも使用する。


●行入力演算子


@data = <FILE>;


<>が行入力演算子。


FILEの中身を1行ずつ配列に代入している。


●ヒアドキュメント

print << END;


print の後の<< がヒアドキュメントを使う指定。


ENDが終端文字列で任意の名前。



print <<END;

このなかHTMLタグ

END


このように、HTML出力をする。


最後のENDの後は必ず改行しないとエラーになる。これ決まり。



改行しないとこうなりました。


Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Apache/2.0.54 (Win32) Server at 127.0.0.1 Port 80
今日はおしまい

第3日目の授業は、アクセスカウンターの作成。


ホームページへの訪問者数をカウントするCGIだ。


おやおや、お題目はアクセスカウンターですが、今日の授業は今までと同じ

さいころのようだ。


なになに、さいころの目の数だけ黒丸を表示させるプログラムをつくるようだ。



では早速、コーディング。


----------------------------------

#! c:/perl/bin/perl


#さいころを振る

$role = int(rand 6) +1;


#サーバ出力

print "content-type: text/html\n\n";


print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>perl さいころ</title></head>\n";
print "<body>\n";

print "<p>さいころの目は<big>$role</big>です。</p>\n<p>";

#さいころの目出力

$i = $role;

While($i > 0){

print "●";
$i--;

};

print "</p></body>\n";

print "</html>\n";
------------------------------------------------


さあ、実行。 http://127.0.0.1/tendays/3-1.cgi


Internal Server Error


がっがーんガーン



while文を閉じる括弧のあとにセミコロンがあるぞ。


セミコロンを消して再実行!


Internal Server Error


かわらず・・・。どこだどこだ。


わからんerror logをみるか。


C:ApacheGroup\Apache2\logs\error.logをみる。


[Tue Dec 19 23:19:08 2006] [error] [client 127.0.0.1] Premature end of script headers: 3-1.cgi
[Tue Dec 19 23:19:08 2006] [error] [client 127.0.0.1] syntax error at C:/ApacheGroup/Apache2/htdocs/tendays/3-1.cgi line 25, near "){"\r
[Tue Dec 19 23:19:08 2006] [error] [client 127.0.0.1] syntax error at C:/ApacheGroup/Apache2/htdocs/tendays/3-1.cgi line 30, near "}"\r
[Tue Dec 19 23:19:09 2006] [error] [client 127.0.0.1] Execution of C:/ApacheGroup/Apache2/htdocs/tendays/3-1.cgi aborted due to compilation errors.\r


25行目と30行目がおかしいらしい。


早速チェック



あっ、whileがWhileになってる。



再実行。


さいころの目は6です。

●●●●●●



でたでた。


今日のポイント


●関係演算子


$a < $b

$a <= $b

$a > $b

$a >=$b


オートインクリメント演算子オートデクリメント演算子


++$a $a++

--$a $a--


繰り返し構文While文


繰り返し同じ文を実行することが可能。


今日はこれでおしまい