Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Как сделать счетчик посещений?


Автор: Олюнчик 20.12.2006, 17:04
Ребята, помогите со счетчиком.
Все дело в том, что мой сайт написан на html.
И нужно в самом низу сранички, слева от копирайтов и прочего, разместить число просмотров страницы. Как это сделать? Счетчик сделать нужно просто из обычных цифр... графика не нужна.

Заранее спасибо. smile

Автор: Nab 20.12.2006, 17:42
Если не поддерживается никакое скриптование на сервере, то никак...
Поищите внешний сервис... их много в сети...

Автор: Олюнчик 20.12.2006, 18:23
Nab, да нет же...
Это задание такое, типа лаба... локальный хостинг через Апач. smile

Автор: Nab 20.12.2006, 19:08
ну тады во первых форум не тот smile
А во вторых, поиск по форуму рулит... smile
Вот здесь Короб давал неплохой пример
http://forum.vingrad.ru/topic-122087.html

Автор: Олюнчик 20.12.2006, 19:28
И чего? smile
У меня-то не перловый файл, а html-ный...
Как мне быть?

Я так понимаю, нужно вставить в html-код что-то типа этого:

Код

<br />Количество просмотров страницы: 


А дальше как? Нужно ссылку на соответсвтующий cgi-сценарий писать или что?

 smile 

Автор: Nab 20.12.2006, 19:41
Ээээээ, внимательно прочтите мое первое сообщение....
Если это просто статичный HTML то НИКАК

А если поддерживается хоть что-то, из серверного скриптования, то можно делать...
SSI есть? cgi-bin есть? настроен? работает? перл вообще стоит, простой скрипт выполняется?
Код

#/usr/bin/perl -w

print "Content-Type: text/html\n\n";
print "Ok!\n";

1;

Автор: Materium 20.12.2006, 19:42
Тебе что просто оформить нужно инструментами HTML? ))) Как Nab написал без скриптовых языков ты ничего не посчитаешь и никуда не запишешь. А оформить можно десятками разных способов. Так что нужно?

Автор: Олюнчик 20.12.2006, 22:14
Nab, 
Materium, надо обязательно инструментами перла делать. smile
Перл стоит, апач тоже, отдельные скрипты выполняются.. 

Цитата

А если поддерживается хоть что-то, из серверного скриптования, то можно делать...


Как узнать?

А еще такая проблема - сделала рассылку и опрос на сайте, вроде все норм, апач запущен, но при нажати соотвественно на "Подписаться" и на "Голосовать" вместо запуска этих сценариев винда выводит окно о загрузке данных файлов.. Почему? Как с этим бороться?  smile 

Автор: Nab 20.12.2006, 22:32
Нужно сформировать корректный заголовок HTTP.
Хотя к делу это не относиться...

Вставить счетчик просто на страницу HTML нельзя... скрипт не выполниться... поэтому в большинстве случаев и юзают картинки... Они подгружаются отдельным запросом...
В Вашем случае можно попробовать SSI, а более верно формировать всю страницу перлом, вместе со счетчиком... тогда у Вас простого html не будет а будут только скрипты которые при отдаче страницы будут подставлять туда значение счетчика... Это можно сделать как используя любую систему шаблонов, так и напрямую вставив html код в код перл...

Автор: Олюнчик 21.12.2006, 00:13
Цитата(Nab @ 20.12.2006,  22:32)
В Вашем случае можно попробовать SSI, а более верно формировать всю страницу перлом, вместе со счетчиком... 

Как это сделать?
Как форматировать страницу перлом? У меня уже все готово на html, не хочу переделывать все на перл...

Ребят, помогите написать хоть ЧТО-НИБУДЬ, любой счетчик, чтобы было попроще выполнить...
Скоро уже преподу показывать надо. smile 

Автор: Nab 21.12.2006, 00:42
Цитата(Олюнчик @ 21.12.2006,  00:13)
Цитата(Nab @ 20.12.2006,  22:32)
В Вашем случае можно попробовать SSI, а более верно формировать всю страницу перлом, вместе со счетчиком... 

Как это сделать?
Как форматировать страницу перлом? У меня уже все готово на html, не хочу переделывать все на перл...

Я так и не понял, что именно Вам нужно?

SSI (Server Side Includes) - включения на стороне сервера... файлы почти тотже HTML, только имеют дополнительные конструкции и как правило имеютт расширение .shtml.
Если они включены в апаче, то можно такой вот конструкцией
включить в состав вашей страницы еще и содержимое страницы page.shtml
Код

<!--#include virtual="page.shtml" -->

или результат выполнения скрипта
Код

<!--#exec cgi="my_script.pl" -->


если все формировать перлом, то это отдельный разговор, потому как учитывая что у вас уже сформированный html, то прийдется переписать все ссылки... и вообще это надо было заранее продумывать... как рисуя простой html туда вставлять динамику...

Автор: korob2001 21.12.2006, 09:14
Вот немного переделанный счётчик, который я приводил раньше.
Код

#!/usr/bin/perl
use DB_File;
use CGI qw(param);

my %counter = ();
my $count = 0;
my $page  = param('page');

tie(%counter, "DB_File", "/home/localhost/cgi-bin/counter/count") or die $!;
if (exists $counter{$page} ) {
    $count = ++$counter{$page};
} else {
    $count = $counter{$page} = 1;
}
untie(%counter);
print "Content-type: text/html\n\n";
print $count;

Допустим путь к нему выглядит так /cgi-bin/counter/counter.pl
В том месте HTML страницы, где ты хочешь видеть счётчик, просто подключай SSI.
Например код главной страницы:
Код

<html>
    <head>
        <title>Home</title>
    </head>
    <body>
        <!--#include virtual="/cgi-bin/counter/counter.pl?page=Home" -->
    </body>
</html>

Обрати внимание на то, что при обращении к скрипту нужно передавать параметр, что бы он знал, как идентифицировать счётчик. Это говорит о том, что нужно изменять этот параметр на каждой странице, где ты используешь счётчик. Если выше мы передали параметр Home, для главной страницы, то для гостевой книги вполне подойдёт Guestbook, т.е. наш SSI тэг будет примет такой вид:
Код

<!--#include virtual="/cgi-bin/counter/counter.pl?page=Guestbook" -->


Автор: Олюнчик 21.12.2006, 12:27
korob2001, не получается. smile
Может я в пути к файлу что не так сделала... не знаю. smile(

А какое расширение должно быть у файла

Код

#!/usr/bin/perl
use DB_File;
use CGI qw(param);

my %counter = ();
my $count = 0;
my $page  = param('page');

tie(%counter, "DB_File", "/home/localhost/cgi-bin/counter/count") or die $!;
if (exists $counter{$page} ) {
    $count = ++$counter{$page};
} else {
    $count = $counter{$page} = 1;
}
untie(%counter);
print "Content-type: text/html\n\n";
print $count;


И почему у тебя в тексте программы "/home/localhost/cgi-bin/counter/count" , а путь ты написал "Допустим путь к нему выглядит так /cgi-bin/counter/counter.pl" ?

Добавлено @ 12:36 
Цитата

[Thu Dec 21 12:33:27 2006] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at z:\LOCALH~1\cgi-bin\counter.pl line 4.


Вот какая ошибка в logs. Что это значит?

Автор: Nab 21.12.2006, 14:14
Цитата(Олюнчик @  21.12.2006,  12:27 Найти цитируемый пост)
А какое расширение должно быть у файла

А это зависит от того как настроен апач, обыкновенно .pl или .cgi.

Цитата(Олюнчик @  21.12.2006,  12:27 Найти цитируемый пост)
И почему у тебя в тексте программы "/home/localhost/cgi-bin/counter/count" , а путь ты написал "Допустим путь к нему выглядит так /cgi-bin/counter/counter.pl" ?

Потому что физическое расположение файла на диске абсолютно никак не связано с тем, как путь к этому файлу видит клиент (броузер или еще какой...). URL формируется тоже в связке с настройками апача. Параметр DocumentRoot или что-либо подобное.

Учитывая что у тебя винда, то путь к счетчику должен быть скорее всего таким:
Код

z:\LOCALH~1\cgi-bin\counter\count


Цитата(Олюнчик @  21.12.2006,  12:27 Найти цитируемый пост)
Цитата
[Thu Dec 21 12:33:27 2006] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at z:\LOCALH~1\cgi-bin\counter.pl line 4.
Вот какая ошибка в logs. Что это значит?

Олюнчик, будьте добры взять словарик и перевести что это значит... всеже здесь форум программистов а не переводчиков... и надо хоть как-то самой двигаться....

А значит это, что компиляция завершилась ошибкой на 4 строке скрипта. Чтоб задавать такой вопрос  желательно еще и ваш файлик показать... Что у вас в 4 строке? Потому как в скрипте который вы привели в 4 строке пусто...

Автор: Олюнчик 21.12.2006, 14:28
Цитата

[Thu Dec 21 14:27:02 2006] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at z:\LOCALH~1\cgi-bin\counter.pl line 3.


counter.pl
Код

#!z:/usr/Perl/bin/perl

use DB_File;
use CGI qw(param);

my %counter = ();
my $count = 0;
my $page  = param('page');

tie(%counter, "DB_File", "/server/localhost/cgi-bin") or die $!;
if (exists $counter{$page} ) {
    $count = ++$counter{$page};
} else {
    $count = $counter{$page} = 1;
}
untie(%counter);
print "Content-type: text/html\n\n";
print $count;

Автор: Nab 21.12.2006, 14:45
Вообщето если бы у вас не было DB_File, то перл бы так и сказал...
А тут не понятно...
попробуйте первые строки изменить так:
Код

#!z:/usr/Perl/bin/perl -w

use strict;
use DB_File;
use CGI qw(param);


Автор: Олюнчик 21.12.2006, 14:53
Цитата

[Thu Dec 21 14:51:42 2006] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at z:\LOCALH~1\cgi-bin\counter.pl line 4.


Код

#!z:/usr/Perl/bin/perl -w

use strict;
use DB_File;
use CGI qw(param);

my %counter = ();
my $count = 0;
my $page  = param('page');

tie(%counter, "DB_File", "/server/localhost/cgi-bin") or die $!;
if (exists $counter{$page} ) {
    $count = ++$counter{$page};
} else {
    $count = $counter{$page} = 1;
}
untie(%counter);
print "Content-type: text/html\n\n";
print $count;

 smile 
Видимо, ему что-то не нравится тут 'use CGI qw(param);'

Добавлено @ 14:54 
А ошибка 500
Цитата

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.



--------------------------------------------------------------------------------

Apache/1.3.20 Server at localhost Port 80

Автор: Nab 21.12.2006, 15:27
Да нет, тут ошибка вроде на DB_File? он у вас вообще стоит?

Попробуйте просто вот такую команду:
Код

perl -MDB_File

У меня правда, он на нее вот так ругается:
Код

Can't locate DB_File.pm in @INC (@INC contains: d:/bin/perl/lib d:/bin/perl/site /lib .).
BEGIN failed--compilation aborted.


Автор: Олюнчик 21.12.2006, 15:42
Попробовала. Вот.
Цитата

[Thu Dec 21 15:41:28 2006] [error] [client 127.0.0.1] BEGIN failed--compilation aborted.


Код

#!z:/usr/Perl/bin/perl -MDB_File

Автор: Nab 21.12.2006, 16:28
ЭЭЭЭЭ, нет smile

Это:
Код

perl -MDB_File

нужно выполнить просто из командной строки вашей виндоус....... smile

Автор: Олюнчик 21.12.2006, 22:50
Ребята! Спасибо!
Я разобралась!!!

 smile 

Автор: Nab 22.12.2006, 01:22
Цитата(Олюнчик @  21.12.2006,  22:50 Найти цитируемый пост)
ебята! Спасибо!Я разобралась!!!

Какая толковая девушка smile
Только не забудьте закрыть тему....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)