|
|
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
|