|
1.アクセスカウンタの仕組み
アクセスカウンタとは以下のような仕組みになってます。
1.最初のアクセスがあればファイルに1を記録します。
2.二回目以降のアクセスがあればファイルを読み込みます。
3.ファイルに書き込まれた数字に1を足します。これを画面に表示します。
4.この数字をファイルに上書きします。
これがアクセスカウンタの基本的な仕組みです。
2.「最初アクセスカウンタ」のプログラム
空のファイルacdata.txtを作ってください。
-ac1.bas-
#!/usr/bin/scriba
'入力
open "acdata.txt" for input as 1
line input #1, count
close 1
'+1します
count=count+1
'保存です
open "acdata.txt" for output as 1
print #1,count
close 1
'表示部分です
print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"
print count
print "</body></html>" |
1行目はScriptBasicの位置を指します。CGIを書くときのおまじないとでも思ってください。
3行目の'入力は注釈(コメント)です。Basicでは'以降の文字はコメントとして無視されます。何をしているのか書いておけば、
後でプログラムを見直すときに重宝します。
open "acdata.txt" for input as 1でファイルacdata1.txtを読み込みます。
line input #1, countでファイルから1行取り出しcountに代入します。
close 1でファイルを閉じています。
注意:先にファイルを読み込みますので、acdata.txtは必ず先に作っておいてください。
countの内容(値)が一つ増えます。
open "acdata.txt" for output as 1で上書き用に開きます。
print #1,count 変数countを書き込み
close 1 ファイルを閉じました。
以下は表示部分です。変数countを表示しています。
ファイルを実行してみてください。
更新するとアクセス数が一つずつ増えていくのがわかりますね。
▼参考リンク
ファイルを使おう
3.ファイルがない場合でも動くように・・・
先ほどのプログラムですが、acdata.txtが存在しない場合もプログラムを実行しようとし、
結果としてInternal Server Errorが表示されてしまうという問題点があります。ここではそれを直します。
-ac2.bas-
#!/usr/bin/scriba
IF FILEEXISTS("acdata.txt") THEN
'入力
open "acdata.txt" for input as 1
line input #1, count
close 1
'+1します
count=count+1
ELSE
'ファイルが存在しない場合はcountを1にします
count=1
END IF
'保存です
open "acdata.txt" for output as 1
print #1,count
close 1
'表示部分です
print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"
print count
print "</body></html>"
|
ファイルacdata.txtが存在すれば、FILEEXISTS()は真(TRUE)を返します。IFは条件式が真の時、THEN以降を実行します。
ですので、ファイルが存在する場合のみファイルを開いて変数countを取得し、変数countに1を足します。
ファイルが存在しなければ、FILEEXISTS()からは偽(FALSE)が返されますので変数countは1となります。
後は、先ほど作ったac1.basと同一です。
4.ファイルopenを一回にまとめる
一度のopen命令で読み込み・書き込みをするにはどうすればよいでしょうか?
なぜ、一つにまとめる必要があるかは次項で説明します。
-ac3.bas-
#!/usr/bin/scriba
'ファイルを開く
open "acdata.txt" for random as 1
'変数countに読み込み
line input #1, count
count=count+1
'ファイルの現在位置
SEEK #1,0
'書き込み
print #1,count
close 1
'表示部分です
print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"
print count
print "</body></html>"
|
open "acdata.txt" for random as 1でacdata.txtを開きます。randomは読み込みと書き込み(追記)を同時にする命令です。
inputと違い事前にファイルを用意する必要はありません。
open ファイル名 for モード 番号
・モードはinput/output/append/random/binary/soketから選びます。
・番号:1〜512の間で決定
openしたら必ずcloseしなければならないことにご注意下さい。
line input #1, count ここで変数Aに代入します。
次のcount=count+1で1を加算します。
SEEK #1,0で現在位置を指定します。ファイルの位置を先頭に変更しました。こうしないと上書きではなく後ろに追記してしまいます。
SEEK 番号 ,位置
番号:openで指定した番号
位置:(0が先頭)
print #1,countでcountの値を書き込みます。
|
|