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


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     03 Jun 2002  17:35:54
 To : "Edward Shevtsov"
 Subject : Re: счетчик глючит, а где не пойму
 -------------------------------------------------------------------------------- 
 
 Здравствуй, Edward Shevtsov.
 
 ES> Здравствуйте, уважаемые
 
 ES> помогите разобраться, не врубаюсь в чем проблема.
 
 ES> Есть простейший текстовый счетчик
 ES> === Begin code ===
 ES> $basedir = "....../cgi-bin/counter";
 ES> read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
 ES> $user = $ENV{'QUERY_STRING'};
 ES> open (COUNT,"$basedir/$user");
 ES> $countold = <COUNT>;
 ES> close COUNT;
 ES> $countnew = $countold + 1;
 ES> open (COUN,">$basedir/$user");
 ES> print COUN "$countnew";
 ES> close COUN;
 ES> print "Content-Type: text/html\n\n";
 ES> print "$countnew\n";
 ES> exit;
 ES> === End code ===
 
 ES> Вставляю скрипт в страницу через SSI:
 ES> <!--#if expr="$DOCUMENT_NAME=index.shtml" -->
 ES> <DIV class="counter"><!--#include virtual="/cgi-bin/counter/counter.pl?rrr" 
 ES> --></DIV> <!--#endif -->
 
 ES> Вроде работает, но через два раза на третий не отдает число на страницу (в
 ES> коде страницы пустой DIV). При этом в файле счетчик всегда увеличивается,
 ES> т.е. скрипт похоже работает правильно. Апач отдает страницу нормально,
 ES> разница только в размере файла - те 4 байта под цифры счетчика. Тестировал
 ES> дома - все работает,  у хостинг-провайдера - вот такая беда. Куда
 ES> смотреть?
 
 Я бы сначала исправил все имеющиеся грубые ошибки, а потом бы уже смотрел,
 почему не работает. Исправленный счетчик для твоей (очень простой) ситуации
 выглядит примерно так:
 
 #!/usr/bin/perl
 use strict;
 use Fcntl qw(:flock :seek);
 my $user = $ENV{'QUERY_STRING'};
 # ошибку отсутствия $user обрабатывай сам, я не знаю, как оно у тебя должно
 # рулиться
 my $basedir = "....../cgi-bin/counter";
 open(COUNT,"+< $basedir/$user") or die "Cannot open $basedir/$user: $!";
 flock(COUNT,LOCK_EX) or die "Cannot lock $basedir/$user: $!";
 my $count = <COUNT>;
 $count++;
 seek(COUNT,0,SEEK_SET) or die "Cannot seek to start of $basedir/$user: $!";
 print COUNT $count or die "Cannot write to $basedir/$user: $!";
 close COUNT or die "Error closing $basedir/$user: $!";
 print "Content-Type: text/html\n\n$count\n";
 
 -- 
 Artem Chuprina
 Communiware.net
 RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/358.49, ICQ: 13038757
 --- ifmail v.2.15dev5
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 счетчик глючит, а где не пойму   Edward Shevtsov   03 Jun 2002 15:00:35 
 Re: счетчик глючит, а где не пойму   Artem Chuprina   03 Jun 2002 17:35:54 
Архивное /ru.cgi.perl/144544875aa6d.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional