#!/usr/bin/perl #========= $typecheck=0; ($sec,$min,$hour,$mday) = localtime(time); $ttt=time; #========= #Get data from memory -------- if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $bufer, $ENV{'CONTENT_LENGTH'}); } else { $bufer=$ENV{'QUERY_STRING'}; } #End ------------------------- @pairs = split(/&/, $bufer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $VOTE{$name} = $value; } $filecnt="$VOTE{id}.cnt"; $filedata="$VOTE{id}.dat"; $filelog="$VOTE{id}.log"; $action="$VOTE{action}"; $oldlog="$VOTE{id}.old"; # if($action eq "show") { &show; } else { $typecheck=$VOTE{checkip}; if($typecheck ne "dont"){✓} &add; &show; } sub check { $newip=$ENV{'REMOTE_ADDR'}; $host=$ENV{'REMOTE_HOST'}; open(CHECK,"$filelog") || open(CHECK,">$filelog") ; @check= ; close (CHECK); if($typecheck eq "levad") { foreach $pair (@check) { ($oldip,$a)=split("::",$pair); if($oldip eq $newip) { print "Content-type: text/html\n\n"; print "




Вы уже голосовали.


По условиям данного голосования можно проголосовать только один раз.
"; exit; } } } else { $graniza=3600*$typecheck; foreach $pair (@check) { ($oldip,$oldtime)=split("::",$pair); if($oldip eq $newip) { $a=$oldtime+$graniza; if($a >= $ttt) { print "Content-type: text/html\n\n"; print "




Вы уже голосовали.


По условиям данного голосования можно проголосовать один раз в $typecheck час(а).
"; exit; } } } &delold; } open(CHECK,">>$filelog"); print CHECK "$newip\:\:$ttt\:\:\n"; close (CHECK); } sub delold { open (NEW,">$oldlog"); open (OLD,"$filelog"); #select(NEW); while () { ($oldip,$oldtime)=split("::",$_); if($oldtime+$graniza >= $ttt) { print NEW $_; } } close(OLD); close(NEW); rename($filelog,"old.bak"); rename($oldlog,$filelog); } sub add { open (READ,"$filecnt") ||die("Не могу открыть файл $filecnt для чтения"); $READ=; close (READ); @add=split("::",$READ); for($i=0;$i<=@add;$i++) { if($i+1 == $VOTE{vote}){@add[$i]+=1;} } $newline=join("::",@add); open (READ,"+<$filecnt") ||die("Не могу открыть файл $filedata для добавления"); seek(READ,0,0); print READ "$newline"; close (READ); } sub show { &htmlstart; # ------------------------------- html vote --------------------------------- open (VOTE,"$filecnt"); $DATA=; close (VOTE); #Текущее значение foreach $pair ($DATA) { @vote = split (/::/,$pair); } for($i=0;$i<=@vote;$i++) { $sum+=@vote[$i]; } open (VOTE,"$filedata"); @DATA=; close (VOTE); #Вопрос $query=@DATA[0]; #Ответы for($i=1;$i<@DATA-1;$i++) { @answers[$i-1]=split("=",@DATA[$i]); } #Вывод на экран if($sum != 0){$ahuz=$sum/100;} else{$ahuz=1;} for($a=0;$a<@answers;$a++) { @voteshow[$a]=int(@vote[$a]/$ahuz); } print "$query"; for ($a=0;$a<@answers;$a++) { print "@answers[$a] (@vote[$a])"; print " @voteshow[$a]%"; } &htmlend; } sub htmlstart { print "Content-type: text/html\n\n"; print <Пчеландия - Голосование


STYLE } sub htmlend { #html end print "

Всего проголосовало $sum человек(а)

$turl
"; print "

"; }