#! /usr/local/bin/perl # Copyright (c) CGIROOM. http://cgiroom.nu #======================================================================# # [Ver 1.10] GIFCounter # # このプログラムによって起きた事にCGIROOMは責任を負いません。 # 利用契約に同意できない方のご利用は、遠慮下さい。 # # ●お知らせ # このCGIは、カウンターがリセットされ難いように設計してい # ますが、使用していてリセットされてしまった場合、 宜しければ # CGIROOMに連絡して下さい。丈夫なカウンターを目指しているので #======================================================================# # ◆設定項目 #◇カウント値保存ファイル $count_dat="count.dat"; #◇ロックファイル $lock="lock.txt"; #◇GIF画像連結ライブラリ require "../gifcat.pl"; #======================================================================# # ◆カウント処理 binmode(STDOUT); print "Content-type: image/gif\n\n"; if(&lock == 1){ open(NOTE,"$count_dat")||&error;$count = + 1;close(NOTE); open(OUT,">$count_dat")||&error;print OUT $count;close(OUT); open(LOCK,">$lock")&&close(LOCK); }else{ open(NOTE,"$count_dat")||&error;$count = ;close(NOTE); } @a=split(/ */,$count); foreach $a (@a){$a .=".gif"} print &gifcat'gifcat(@a); exit; #======================================================================# # ◆ロック処理 sub lock{ foreach (1..10){ if(-z $lock){ $ban= $$ ; open(LOCK,">$lock")||&error; print LOCK $ban; close(LOCK); next if(-z $lock); open(LOCK,"$lock")||&error; $dummy=; close(LOCK); if($dummy eq $ban){ return 1; } } $times=(stat($lock))[9]; $timer=time - 30; if($times <= $timer){ open(LOCK,">$lock")&&close(LOCK); }else{ sleep 1; } } return 0; } #======================================================================# # ◆エラー表示 sub error{ print pack("H*","47494638396126000f0080ff00ffffffff00002c0000000026000f0040024e8c8fa9cb08face8b66ba40f14dd94afd750e409260758265244aebb456b16c62f3c75de2bea179a80be21ac4a2f1886c647c281e7098626a9ccd9e2df6a2d57637a9d4537d7e21c2b0399a4c230a003b"); exit; } __END__ 1999/07/16 Ver 1.10