Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Alexander Ponomarenko                2:5030/1067.10 18 Jan 2003  18:47:33
 To : All
 Subject : Counter
 -------------------------------------------------------------------------------- 
 
 Вот дописал счетчик. Посмотрите и зацените плиз. Интересуют возможные ошибки и
 предложения по оптимизации:
 === Cut ===
 #!/usr/bin/perl -w
 use CGI qw(:standard);
 use Fcntl qw(:flock);
 use 5.004;
 
 my $num=param("num");
 my $admin=param("admin");
 
 if(defined($admin)) {
 print"Content-type: text/html\n\n";
 print"<html><body>Counter v1.0<br><table width=500><tr bgcolor=lightblue><td>IP 
 Adress</td><td>Time (days ago)</td><td>Time (hours
 ago)</td><td>Count</td></tr>";
 open(IP,"cgifiles/count_ip");
 flock(IP,LOCK_SH);
 while(defined($rec=<IP>)) {
     ($ip,$t,$col)=split(/:/,$rec);
     $t=(time()-$t);
     $day=$t/60/60/60;
     $t=$t/60/60;
     print"<tr
 bgcolor=lightgrey><td>$ip</td><td>$day</td><td>$t</td><td>$col</td></tr>";
 }
 close(IP);
 print"</table></body></html>";
 }
 
 if(defined($num)) {
 open(COUNT,"cgifiles/count");
 flock(COUNT,LOCK_SH);
 $nomer=<COUNT>;
 close(COUNT);
 chomp($nomer);
 
 if($num eq "1") {
 $user_ip=$ENV{REMOTE_ADDR};
 open(IP,"cgifiles/count_ip");
 flock(IP,LOCK_SH);
 while(defined($rec=<IP>)) {
     chomp($rec);
     ($ip,$t,$col)=split(/:/,$rec);
     $hash{$ip}=$t;
     $colvo{$ip}=$col;
 }
 close IP;
 
 $hash{$user_ip}=$hash{$user_ip}+10*60;
 $colvo{$user_ip}++;
 if($hash{$user_ip}>time()) {$sec="1"}
 $hash{$user_ip}=time();
 
 open(IP,">cgifiles/count_ip");
 flock(IP,LOCK_EX);
 foreach $key (sort keys %hash) {
     print IP "$key:$hash{$key}:$colvo{$key}\n";
 }
 close IP;
 }
 
 if(($num eq "1") and (!defined($sec))) {
     $nomer++;
     open(COUNT,">cgifiles/count");
     flock(COUNT,LOCK_EX);
     print COUNT "$nomer\n";
     close(COUNT);
 }
 
 @nomber=split("",$nomer);
 $fil="../html/pics/$nomber[$num-1].gif";
 print"Content-type: image/gif\n\n";
 open(PIC,$fil);
 flock(PIC,LOCK_SH);
 while(defined($rec=<PIC>)) {
 print $rec;
 }
 close(PIC);
 }
 === Cut ===
 
 Вызывается отдельно для каждой из 4х цифр (параметр "num"). Hе позволяет одному 
 IP-адресу обновлять счетчик в течении 10 минут. Можно смотреть статистику, если 
 задать параметр "admin".
 
 P.S.: Image Magick не предлагать. Важно возвращать по одной цифре.
 
 Alexander
 
 --- GoldED+/386 1.1.4.7
  * Origin:  (2:5030/1067.10)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Counter   Alexander Ponomarenko   18 Jan 2003 18:47:33 
 Re: Counter   Artem Chuprina   19 Jan 2003 14:33:24 
 Counter   Alexander Ponomarenko   21 Jan 2003 13:36:59 
 Re: Counter   Konstantin Tokar   24 Jan 2003 12:46:44 
 Counter   Alexander Ponomarenko   29 Jan 2003 14:25:08 
 Re: Counter   Konstantin Tokar   30 Jan 2003 13:00:58 
Архивное /ru.cgi.perl/45153e29943e.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional