#!/usr/local/bin/perl #飛ばないカウンター(SSI用) V1.01 #昨日と今日のアクセス付き #偽春菜メッセージ付き # # Copyright(c) 1999-20xx Yuumi # http://gochagocha.ribbon.to/ # gochagocha@ribbon.to # # 本プログラムはフリーソフトウェアーです。使用するには以下の使用許諾事項をお守りください # # 使用許諾事項 # 1.商用目的に使用してはいけません # 2.著作権を削除して使用してはいけません # 3.著作権を削除して2次創作物を作成する、又は2次配布を行ってはいけません # # # 設置方法 # 1.上記のPerlの位置と、以下の $imagepath を設定します # 2.設置する場所にアップロードをし、パーミッションを700又は705に変更します # 3.表示するHTMLにSSIのコードを書いて完成! # # # 特徴 # 1.追記書き込みですので、データが飛ぶ心配がありません # 2.初期設定が楽です、lockの為のディレクトリやカウンターのデータをアップロードする必要がありません use Socket; #イメージファイルがあるディレクトリまでの設置するURLからのパス( 0.gif 〜 9.gifが存在すること) $imagepath = 'http://www.yourdomain.des/imagedir/'; #1番目のカウンタデータファイル サイズ*$stepcountがカウントになる $datafile = "./cdat.dat"; #2番目のカウンタデータファイル $stepcountまでの細かいカウント用、$stepcountを越えるとリセットされる $datafile2 = "./cdat2.dat"; #2番目のファイルでカウントする最大値 $stepcount = 1000; #8桁表示 0 or 1 $view8 = '1'; #サーバが日本時間以外の時は変更 ($sec,$min,$hour,$mday,$mon,$year,$wday,$d,$d) = localtime(time+ 9*60*60); #今までの日々のデータが保存されるファイル $fdatelog = 'datelog.dat'; #print "Content-type: text/html\n\n"; #デバッグ時は先頭の#をはずしてね print ''; if( -e $datafile ){ @cbfstat = stat $datafile; } $cbase = $cbfstat[7] * $stepcount; if( -e $datafile2 ){ @cfstat = stat $datafile2; } $cnumber = ++$cfstat[7] + $cbase; $onebyte = '1'; if( ($cfstat[7] % $stepcount) == 0 ){ if ( !open(DATA,">>$datafile") ) { &error; } print DATA $onebyte; close (DATA); if ( !open(DATA,">$datafile2") ) { &error; } close (DATA); }else{ if ( !open(DB,">>$datafile2") ) { &error; } print DB $onebyte; close(DB); } #昨日と一昨日のデータを読み出す # ydate:昨日 yydate:一昨日 if( open( DB ,"$fdatelog" )){ @datelog = ; close(DB); } ($ydate , $ycount ) = split( /:/ , pop( @datelog ) ); if( $ydate eq $mday ){ $yydate = $mday; while( $yydate eq $mday ){ ($yydate , $yycount ) = split( /:/ , pop( @datelog ) ); } }else{ if( !open( DB ,">>$fdatelog" )){ &error; } print DB "$mday:$cnumber\n"; close(DB); $yycount = $ycount; $ycount = $cnumber; } $todaycount = $cnumber - $ycount; $yesterdaycount = $ycount - $yycount; my $keta = ( @counter = split(//,$cnumber)); if( $view8 eq '1' ){ for( $keta .. 7 ){ unshift @counter,'0'; } } foreach $count (@counter) { $imgfile = "$imagepath$count.gif"; print "\"$count\""; } #昨日と今日の表示はこちらで調節してください print "
today:$todaycount
yesterday:$yesterdaycount
"; my $dmy = &nh_SEND_SSTP( '\hカウント増やしてくれたありがとう\e' , '飛ばないカウンタ' ); exit; # ================= NISEHARUNA ====================== sub nh_SEND_SSTP{ local $SIG{'ALRM'} = sub{ close( SOCKET ); $timeout_flag = 1}; alarm 7; # 7秒でタイムアウト my $nh_send_script = $_[0]; //第一引数:送る内容 my $nh_send_sender = $_[1]; //第二引数:sender 名 my $nh_port = 11000; my $nh_addr = $ENV{'HTTP_X_FORWARDED_FOR'}; if ( $nh_addr eq '' ) { $nh_addr = $ENV{'REMOTE_ADDR'}; } if( $nh_addr ne '' ){ my $nh_proto = getprotobyname('tcp'); socket(SOCKET , PF_INET, SOCK_STREAM, $nh_proto ); my $nh_ent = pack_sockaddr_in( $nh_port , inet_aton( $nh_addr )); if( connect( SOCKET , $nh_ent )){ select( SOCKET ); $| = 1; select( STDOUT ); print SOCKET "SEND SSTP/1.0\r\n"; print SOCKET "Sender: $nh_send_sender\r\n"; print SOCKET "Script: $nh_send_script\\e\r\n"; print SOCKET "\r\n"; my $result = ; while ( ) { ; } close( SOCKET ); return( $result ); } } return; } # ============================== sub error { print "ERROR"; exit; } _END_