|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/45153e29943e.html, оценка из 5, голосов 10
|