AN HTTPD ゲストブック/コメント集(2000年11月12日19:00)


加藤 katou@hct.zaq.ne.jp 2000/11/12 23:36

Syber さん、いとさん

ありがとう御座います。.shtmlに拡張子を変更したら、無事動作するようになりました。
これで勉強を続けることができます。
ありがとう御座いました。


加藤 katou@hct.zaq.ne.jp 2000/11/12 23:32

Syberさん、早速のresありがとう御座います。
でもやはり動作しません。
ロックを0に変えてみてもだめでした。
「あなたは 人目の訪問者です。」としか表示されません。
OSはWin2000を使用していますが、AnHTTPDの設定にミスがあるのでしょうか?
現状ではデフォルトのまま使用しています。
掲示板などのCGIは正常動作するのですが・・・。
何か他に注意する点がありましたら、御教授お願い致します。


いと gfh05223@nifty.com 2000/11/12 23:15

加藤さん

AN HTTPDのオプション設定がデフォルトのままということでしたら、ファイル名を
counter.html でなく、counter.shtml に変更して試してみてください。
AN HTTPDではセキュリティ上、デフォルトではドキュメントルート下のindex.htmlと、
*.shtmlという名前のファイルでしかSSIを実行できなくなっています。
もし、*.html でもSSIを実行したいということなら、オプション/一般タブの *.html
にもチェックを付けてください。
Syberさんが言われるように、プログラムの問題ではなさそうに思えます。


Syber syber@mc.kcom.ne.jp 2000/11/12 20:43

加藤 さん

ソースを実行テストしましたが、ちゃんと動作いたします。
ロックを使っているので、Windows95/98/Me の場合、flock は
使用できません。
ソースを見ると、ロックをON/OFFできる処理みたいなので、
$uselock = 1; を $uselock = 0; に変えたら、 flock はOFF
になり、実行されない処理になっているようなので。


加藤 katou@hct.zaq.ne.jp 2000/11/12 19:00

 加藤です。
 度々お騒がせいたします。
 アクセスカウンタのプログラムなのですが、SSIが上手く動作しません。
 下がそのプログラムです。

(counter.html) 
<HTML>
<BODY>
あなたは、<!--#exec cmd="./counter.pl counter"-->人目の訪問者です。
</BODY>
</HTML>

(counter.pl)
#!/usr/local/bin/perl

$dir = '.';
$extension = 'cnt';

$uselock = 1;

if ($#ARGV < 0) {
print "Usage: counter.pl countername\n";
exit(0);
}

$countername = $ARGV[0];

$datafile = "$dir/$countername.$extension";

if (!open(OUT, "+<$datafile")) {
print "???";
exit(0);
}

if (!&lock_file(OUT)) {
print "busy";
exit(0);
}

seek(OUT, 0, 0);
$count = 1 + <OUT>;
seek(OUT, 0, 0);
print OUT "$count\n";
&unlock_file(OUT);

close(OUT);

print "$count\n";

exit(0);

sub lock_file {
local(*FILE) = @_;
if ($uselock) {
eval("flock(FILE, 2)"); # 2=LOCK_EX
if ($@) {
return 0;
}
}
return 1;
}

sub unlock_file {
local(*FILE) = @_;
if ($uselock) {
eval("flock(FILE, 8)"); # 8=LOCK_UN
}
}

 同じフォルダに置いて、counter.htmを実行しても、カウンタ数が表示されません。
 カウンタファイルの中には0が入っています。
 このサンプルが載っていた本には、「カウンタ数が表示されないのはSSIが上手く動作
していない」と書かれていたので、詰まってしまいました。
 プログラムがおかしいのでしょうか?
 毎度申し訳ありませんが、御教授お願い致します。