2000/03/29 (水) 05:27:40      [mirai]
SSIカウソタに適当に変更を加えたヽ(´ー`)ノ

#!/usr/local/bin/perl

$BDIR = ""; # Base directory
$BASE = "ssic"; # Default basename
if(defined($ARGV[0]))
{
	$BASE = $ARGV[0];
} else {
	$BASE = $ENV{"QUERY_STRING"} if(defined($ENV{"QUERY_STRING"}));
}
$BASE =~ s/\0//g;
$BASE =~ s/([\&;\`'\\\|"*?~<>^\(\)\[\]\{\}\$\n\r])/\\$1/g;
$BASE =~ s/\.\.\///g;

$BLOCK = 1024;

$CFILE = "$BDIR$BASE.ct";
$BFILE = "$BDIR$BASE.bt";

&error(1, "$CFILE Not Found") unless(-e $CFILE);
&error(1, "$BFILE Not Found") unless(-e $BFILE);

open(COUNT, ">>$CFILE") || &error(1, "Cannot open $CFILE");
print COUNT "a";
close(COUNT);

if($BLOCK <= (-s $CFILE))
{
        open(BLOCK, ">>$BFILE") || &error(1, "Cannot open $BFILE");
        print BLOCK "a";
        close(BLOCK);

        open(COUNT, ">$CFILE") || &error(1, "Cannot open $CFILE");
        close(COUNT);
}

$count = (((-s $BFILE) || 0) * $BLOCK) + (-s $CFILE);

print "Content-type: text/plain\n\n";
printf "%d", $count;
exit;

sub error
{
        $exit = shift(@_);
        print "Content-type: text/plain\n\n";
        print "@_";
        exit if($exit);
}

<!--#exec cgi="dual/ssic.cgi?xx"-->
とか
<!--#exec cgi="dual/ssic.cgi xx"-->
見たいに(サーバによる)呼びだすと$BASEを設定できる。
$BASEを変える場合は変える名前で*.ctと*.btを作っておくことが必要