#!/usr/local/bin/perl
#######################################################
#BooClickAndViewCounter v1.05 / this program is free. #
#bcvcad.cgi (C) BooBooClub 2001-2010 #
#######################################################
#set data
$adpass ='pass';
$dat = './bcvc.dat';
$imgsize = 'width="120" height="25"';
#lock
&lock;
#time
$ENV{'TZ'}='JST-9';
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year = ($year + 1900);
$mon++;
if ($sec < 10) { $sec = "0$sec";}
if ($min < 10) { $min = "0$min";}
if ($hour < 10){ $hour = "0$hour";}
if ($mon < 10) { $mon = "0$mon";}
if ($mday < 10){ $mday = "0$mday";}
$time = "$year/$mon/$mday $hour:$min:$sec";
#read
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else{
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/\cM\n//g;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\,//g;
$value =~ s/</ig;
$value =~ s/>/>/ig;
$value =~ s/\r\n|[\r\n]/
/ig;
$FORM{$name} = $value;
}
#branch
if($FORM{'login'}){
&login;
}
elsif($FORM{'regist'}){
®ist;
}
elsif($FORM{'remove'}){
&remove;
}
&html;
sub login{
if($adpass eq $FORM{'adpass'}){
&html2;
}
else{
print "Content-type: text/html\n\n";
print "
\n";
print ''."\n";
print "Error!\n";
print "\n";
print "
パスワードが間違っています
\n";
print "
\n";
unlink("$lockfile");
exit 0;
}
}
sub regist{
open (DAT,"$dat");
@dat = ;
close (DAT);
$wc = 0;
foreach $data(@dat){
@data = split(/,/,$data);
if($data[0] eq $FORM{'id'}){
$wc++;
last;
}
}
if($wc != 0){
print "Content-type: text/html\n\n";
print "\n";
print ''."\n";
print "Error!\n";
print "\n";
print "
既に存在するIDです
\n";
print "他のIDで登録してください。\n";
print "
\n";
unlink("$lockfile");
exit 0;
}
if($FORM{'id'} eq '' || $FORM{'pass'} eq '' || $FORM{'img'} eq ''){
print "Content-type: text/html\n\n";
print "\n";
print ''."\n";
print "Error!\n";
print "\n";
print "
未記入欄があります
\n";
print "リンク先URLとカウント初期値以外はすべて必須です。\n";
print "
\n";
unlink("$lockfile");
exit 0;
}
if($FORM{'cnt'} eq ''){
$FORM{'cnt'} = '0';
}
$wrt = "$FORM{'id'}\,$FORM{'pass'}\,$FORM{'img'}\,$FORM{'url'}\,$FORM{'way'}\,$FORM{'cnt'}\n";
open (DAT,">>$dat");
print DAT $wrt;
close (DAT);
&html2;
}
sub remove{
open (DAT,"$dat");
@dat = ;
close (DAT);
foreach $data(@dat){
@data = split(/,/,$data);
if($data[0] ne $FORM{'remove'}){
push (@newdata,$data);
}
}
open (DAT,">$dat");
print DAT @newdata;
close (DAT);
&html2;
}
sub html{
print "Content-type: text/html\n\n";
print 'Boo Click and View Counter'."\n";
print ''."\n";
print 'Boo Click and View Counter 管理者ログイン
'."\n";
print ''."\n";
print '
'."\n";
print '
'."\n";
print ''."\n";
print ''."\n";
print ''."\n";
print ''."\n";
print ''."\n";
print '
'."\n";
print '
'."\n";
print '
'."\n";
print ''."\n";
print ''."\n";
unlink("$lockfile");
exit 0;
}
sub html2{
if($imgsize !~ /^ /){
$imgsize = ' '.$imgsize;
}
open (DAT,"$dat");
@dat = ;
close (DAT);
print "Content-type: text/html\n\n";
print 'Boo Click and View Counter'."\n";
print ''."\n";
print 'Boo Click and View Counter 管理ページ
'."\n";
print ''."\n";
print '
'."\n";
print ''."\n";
print '新規登録 |
'."\n";
print 'ID | Password | 画像ファイルパス | リンク先URL | カウント 方法 | カウント 初期値 | 登録 |
'."\n";
print '
'."\n";
print '
'."\n";
print '
'."\n";
print ''."\n";
print '登録データ一覧 |
'."\n";
print 'ID | 画像 | リンク先 | カウント 方法 | カウント数 | 削除 |
'."\n";
foreach $data(@dat){
chomp $data;
@data = split(/,/,$data);
if($data[0] =~ /\w/){
if($data[4] eq 'c'){
$data[4] = 'クリック';
}
else{
$data[4] = '表示';
}
if(-f $data[2]){
$image = '';
}
else{
$image = 'ファイルがありません';
}
print ''."$data[0]".' | '."$image".' | '."$data[3]".' | '."$data[4]".' | '."$data[5]".' |
'."\n";
}
}
print '
'."\n";
print ''."\n";
print ''."\n";
print ''."\n";
print ''."\n";
print ''."\n";
print ''."\n";
unlink("$lockfile");
exit 0;
}
sub lock{
$lockfile = './lock/lockfile';
$retry = 1;
until (symlink("$dat", "$lockfile")){
if (++$retry >= 30){
&lockerror;
exit 0;
}
sleep(1);
}
}
sub lockerror{
print "Content-type: text/html\n\n";
print "Busy!\n";
print "\n";
print "
現在サーバが混雑しています。
\n";
print "恐れ入りますがもうしばらくして再度操作を行ってください。\n";
print "
\n";
unlink("$lockfile");
exit 0;
}