Автор Тема: помогите разобраться!  (Прочитано 2666 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kott

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
помогите разобраться!
« : 12 Марта 2004, 13:20:28 »
Помогите пожалуйста разобратьмся с кодом/настройками счетчика посещений!  нужно 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">

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
помогите разобраться!
« Ответ #1 : 12 Марта 2004, 13:31:21 »
Вот жеж блин. Где ты ЭТО взял?
The documentations is your friend

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
помогите разобраться!
« Ответ #2 : 12 Марта 2004, 15:17:23 »
kott, ты бы взял че попроще
http://webscript.ru/scripts/index.php?t=sub_pages&cat=63
Все болезни от нервов, только сифилис от удовольствия

Оффлайн kott

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
помогите разобраться!
« Ответ #3 : 12 Марта 2004, 16:05:46 »
NeoNox - да это у хостера библиотека готовых скриптов....
Mog. - за ссылку спасибо!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28