Простейший счетчик посещаемости

Обсудив необходимый минимум возможностей языка программирования Perl, переходим к практическим примерам.

Наш первый пример — простейший счетчик числа загрузок той или иной веб-страницы. Его код предельно прост.

01 #!C:/apache/bin/perl/perl
02
03 print "Content-Type: text/plain\n\n";
04
05 $count = 0;
06 $filename = 'data.txt';
07
08 if(-e $filename)
09 {
10 open(DATA, $filename);
11 $count = <DATA>;
12 close(DATA);
13 }
14
15 $count++;
16
17 print $count;
18
19 open(DATA, ">$filename");
20 flock(DATA, LOCK_EX);
21 print DATA $count;
22 flock(DATA, LOCK_UN);
23 close(DATA);
24
25 exit(0);
Первая строка — путь к интерпретатору Perl в среде Windows (предполагается, что читатель работает с «джентльменским набором» сервера и интерпретатора Perl, о котором шла речь в разделе «Настроенный сервер» главы 2. В реальных условиях UNIX-хостинга этот путь будет, естественно, другим (см. раздел «Запуск CGI-скриптов в среде UNIX» этой главы).
Вторая, четвертая и другие строки оставлены пустыми исключительно из соображений удобочитаемости кода. Они никак не влияют на работу скрипта.
Третья строка осуществляет вывод поля Content-Type заголовка сообщения HTTP-ответа сервера.
В пятой строке переменной $count, которая будет содержать число загрузок страницы, присваивается значение 0. Если счетчик ни разу не запускался, отсчет будет начат именно с нуля.
Шестая строка определяет переменную $filename, которая содержит имя файла данных data.txt, куда счетчик записывает информацию о количестве запусков.
В восьмой строке проверяется, существует ли файл с именем, определенным в переменной $filename. Если таковой существует, выполняются строки 10—12: файл с именем data.txt открывается для чтения как поток DATA, из него считывается строка, значение которой записывается в переменную $count, после чего файл закрывается. Предполагается, что в файле data.txt, если таковой существует, содержится не что иное, как число предыдущих запусков счетчика.
В пятнадцатой строке переменная $count наращивается на единицу — таким образом регистрируется запуск счетчика.
Семнадцатая строка скрипта выводит новое значение переменной $count в стандартный вывод.
Осталось записать новое значение переменной $count в файл data.txt, заменив старое значение, что и осуществляется в строках 19—23. Файл data.txt открывается как поток с тем же самым дескриптором DATA (можно использовать и другой дескриптор) для записи. Поток блокируется на время записи при помощи функции flock().
Двадцать пятая строка завершает работу скрипта.
Для того, чтобы проверить счетчик в действии, необходимо скопировать файл \examples\04\03\counter.cgi компакт-диска, прилагаемого к книге, в директорию cgi-bin вашего веб-сервера. Запустить скрипт на выполнение можно, набрав в адресной строке браузера нижеследующий URL:
http://127.0.0.1/cgi-bin/counter.cgi
Сервер при этом, разумеется, должен быть запущен. Наш счетчик можно внедрить в любую веб-страницу при помощи SSI. Как вы понимаете, для этого необходимо включить в код страницы следующую директиву:
<!--#include virtual="/cgi-bin/counter.cgi" -->
Если поместить указанную директиву в файл footer.shtml сайта, описанного в листингах 3.12 — 3.16 главы 3, каждое открытие любой страницы этого сайта будет наращивать наш счетчик на единицу.
Немного видоизменив код счетчика, можно реализовать независимый подсчет загрузок каждой страницы индивидуально, организовав сохранение данных для каждой веб-страницы в отдельном файле. (Разумеется, эффективнее было бы использовать базу данных, но при небольшом количестве страниц сайта и наша схема имеет право на существование.)
Заменим шестую строку листинга 4.3 следующими операторами:


© 2008-2018 ОптимизацияВебСайтов.ру


Любое использование текстового и графического контента сайта без активной ссылки на источник не доскается.