#!/usr/mesh/bin/perl # # アクセスカウンターVer1.01 # # Copyright (C) 1998 CGI Arkadia All rights reserved. # Script written by Shintaro Wakayama. # # ■標準的なディレクトリ階層 # public_html ┬ cgi-bin ─ count ┬ image ┬ 0.gif # │ │ ├ 1.gif # │ │ ├ 2.gif # │ │ ├ 3.gif # │ │ ├ 4.gif # │ │ ├ 5.gif # │ │ ├ 6.gif # │ │ ├ 7.gif # │ │ ├ 8.gif # │ │ └ 9.gif # │ └ count.cgi # └ index.html # # ■パーミッション # -------------------------------------------------- # ファイル名 アクセス権 # -------------------------------------------------- # count 777(ディレクトリ) # count.cgi 755(プログラム) # -------------------------------------------------- &main; sub main { &decode; &file_check; &image_draw; if ($form{'digit'} == 1 && !$form{'function'}) { &count; } } sub decode { @pairs = split(/&/, $ENV{'QUERY_STRING'}); foreach $pair (@pairs) { ($form_name, $form_value) = split(/=/, $pair); $form{$form_name} = $form_value; } } sub file_check { ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); unless (-e "count.txt") { open(COUNT_FILE, ">count.txt"); flock(COUNT_FILE, 2); printf(COUNT_FILE "$year$mon$mday\"0\"0\"0\"\n"); flock(COUNT_FILE, 8); close(COUNT_FILE); } } sub image_draw { open(COUNT_FILE, "count.txt"); $buffer = ; close(COUNT_FILE); chop($buffer); ($log_date, $log_total, $log_today, $log_yesterday) = split(/\"/, $buffer); if ($form{'function'} eq "today") { $count = "0000000000".$log_today; } elsif ($form{'function'} eq "yesterday") { $count = "0000000000".$log_yesterday; } else { $count = "0000000000".$log_total; } $digit = substr($count, (-1)*($form{'digit'}), 1); printf("Content-type: image/gif\n\n"); open(GIF_FILE, "image/$digit.gif"); while(read(GIF_FILE, $buffer, 16384)) { print $buffer; } close(GIF_FILE); } sub count { open(COUNT_FILE, "count.txt"); $buffer = ; close(COUNT_FILE); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); ($log_date, $log_total, $log_today, $log_yesterday) = split(/\"/, $buffer); ++$log_total; if ($log_date != $year.$mon.$mday) { $log_yesterday = $log_today; $log_today = 0; } else { ++$log_today; } open(COUNT_FILE, ">count.txt"); flock(COUNT_FILE, 2); printf(COUNT_FILE "%d%d%d\"%d\"%d\"%d\n", $year, $mon, $mday, $log_total, $log_today, $log_yesterday); flock(COUNT_FILE, 8); close(COUNT_FILE); }