Помогите пожалуйста разобратьмся с кодом/настройками счетчика посещений! нужно 1) чтобы вместо картинок он выдавал цифири в текстовом виде 2) как установить начальное значение посещений не с нуля, а с произвольной цифры (чтоб синхронизировать его с уе имеющимися счетчиком нот лога)
помогите чайнику (полному)!
привожк код счетчика:
#!/usr/bin/perl -w
use strict;
use DBI;
use CGI;
use Fcntl \':flock\';
use IO::Seekable;
use constant COUNTER_COOKIE => \'RBC_Counter\';
use constant COUNTER_EXPIRES => \'+8h\';
use constant COUNTER_DATA_PATH => (getpwuid($<))[7] . \'/www/data/rbccounter/\';
use constant COUNTER_ID_DATA_PATH => (getpwuid($<))[7] . \'/www/data/rbccounter/data/\';
use constant COUNTER_FILE => \'counter.dat\';
use constant DIGITS => [\'0.png\', \'1.png\', \'2.png\', \'3.png\', \'4.png\', \'5.png\',
\'6.png\', \'7.png\', \'8.png\', \'9.png\'];
use constant EMPTY_IMAGE => \'empty.png\';
use constant SIZEOF_LONG => 4;
sub check_remote_host($$)
{
my ($query, $id) = @_;
my $cookie_name = $id ? COUNTER_COOKIE . \'_\' . $id : COUNTER_COOKIE;
my $cookie = $query->cookie($cookie_name);
my $exists = $cookie ? 1 : 0;
$cookie = $query->cookie(-name => $cookie_name, -value => \'1\',
-expires => COUNTER_EXPIRES, -path => \'/\');
return ($cookie, $exists);
}
sub image($$)
{
require GD;
my ($type, $number) = @_;
my $image;
if ($type eq \'empty\')
{
open IMAGE, COUNTER_DATA_PATH . EMPTY_IMAGE;
local ($/) = undef;
$image =
;
close IMAGE;
return (\'image/png\', $image);
}
else
{
my @digits = ();
my @number = split \'\', $number;
my ($width, $height) = (0, 0);
foreach (@number)
{
my $digit = $digits[$_];
unless ($digit)
{
$digit = $digits[$_] = GD::Image->new(COUNTER_DATA_PATH . DIGITS->[$_]);
}
my ($w, $h) = $digit->getBounds;
$width += $w;
$height = $h if $height < $h;
}
my $image = GD::Image->new($width, $height);
my $x = 0;
foreach (@number)
{
my $digit = $digits[$_];
my ($w, $h) = $digit->getBounds;
$image->copy($digit, $x, 0, 0, 0, $w, $h);
$x += $w;
}
return (\'image/png\', $image->png);
}
}
sub main()
{
my $ip = $ENV{\'HTTP_X_FORWARDED_FOR\'} || $ENV{\'REMOTE_ADDR\'} || \'\';
my $query = CGI->new;
my $id = $query->param(\'id\');
my $counter;
if ((defined $id) && ($id ne \'\'))
{
$id =~ s/[^A-Z0-9_]//gi;
$id = substr($id, 0, 16);
$counter = COUNTER_ID_DATA_PATH . $id;
undef $id unless -e $counter;
}
$counter = COUNTER_DATA_PATH . COUNTER_FILE
unless (defined $id) && ($id ne \'\');
my ($cookie, $exists) = check_remote_host($query, $id);
if (-e $counter)
{
open COUNTER, \'+<\' . $counter;
}
else
{
open COUNTER, \'+>\' . $counter;
}
flock(COUNTER, LOCK_EX);
read(COUNTER, $counter, SIZEOF_LONG, 0);
$counter = unpack(\'L\', $counter) || 0;
unless ($exists)
{
$counter++;
seek(COUNTER, SEEK_SET, 0);
print COUNTER pack(\'L\', $counter);
}
flock(COUNTER, LOCK_UN);
close COUNTER;
my $type = $query->param(\'type\') || \'\';
if ($type eq \'text\')
{
print $query->header(-type => \'text/plain\', -cookie => $cookie,
-expires => \'now\') . $counter;
}
else
{
my ($content_type, $image) = image($type, $counter);
print $query->header(-type => $content_type, -cookie => $cookie,
-expires => \'now\') . $image;
}
}
main;
__END__
к странице подключаю таким образом: http://www.unost.org/cgi-bin/RBCcounter.pl">