[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / SSI /

CGI+SSI - пример счетчика

Включения. Иногда является необходимым включить результат работы CGI-скрипта в Web-страницу, чтобы избежать динамического формирования всей страницы одной большой CGI-программой. К тому же не всегда есть возможность первую страницу сервера сделать не статическим html -документом, а неким index.cgi. Проблемы такого типа легко решаемы, как с помощью специальных средств включения на стороне сервера (SSI), так и по средствам различных ухищрений.

SSI - Server Side Includes (включения на стороне сервера). Одно из средств решения 3 рассматриваемой проблемы уже реализовано в самом Web-сервере (рассм. Apache 1.3.x).

<Directory "/home/httpd/html">
Options Indexes FollowSymLinks Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Следует обратить внимание на строку Options - опции директории. Так вот последняя директива в этой строке - Includes и сообщает Web-серверу, что в этой директории разрешено использовать включения в коде Web-страниц. Однако, этой директивы в строке опций не достаточно. Еще требуется указать типы файлов, в которых допускаются включения:

AddType text/html .html
AddHandler server-parsed .html

Такое определение означает, что включения будут допускаться в файлах с содержанием типа text/html и расширением .html. Дело в том, что Web-сервер имеет собственный SSI-препроцессор, который работает подобно его собратьям из языков программирования высокого уровня. Для того, чтобы он стал корректно работать: проверять коды Web-страниц на наличие своих директив, его надо соответствующим образом настроить. Для этих целей и служат приведенные выше строки-примеры. На этом настройка SSI заканчивается.

Директивы включения. Здесь нас интересует включение результатов работы CGI-скриптов в код статичной Web-страницы, но SSI располагает еще несколькими возможностями. Например, включение другого html-документа в данный или автоматическое включение даты последней модификации Web-страницы. Можно таким же образом вставлять локальную и GMT дату, но эти возможности зачастую выполняет JavaScript. И так, для того, чтобы включить что-либо по средствам SSI в ваш HTML-код нужно вставить строчку вида:

<!--#elementh parameter1=value1 parameter2=value2-->

где каждый элемент имеет свой набор параметров:

Элементы Параметры, описания
config errmsg Посылается сообщение об ошибке
sizefmt Формат вывода размера файла
timefmt Формат вывода времени
echo var Печатает специальную переменную
exec cgi Запуск cgi-скрипта, с включением результата
cmd Запуск комманды shell
fsize file Выдает размер файла (полный путь)
virtual Путь от корня Web-сервера
include file Вставляет файл (полный путь)
virtual Путь от корня Web-сервера
set var Имя переменной
value Присваемое значение

Наиболее часто используемым элементом является exec, так как он один позволяет делать специфичные вещи. Остальные элементы не имеют такой популярности, за счет того, что большинство из них реализовано на языке JavaScript или попросту бесполезны.

Счетчик. Первая мысль, которая приходит после включения скриптов, выводящих отладочные бессмысленные надписи, это написать что-либо полезное. Типичным полезным CGI-скриптом требующим SSI является счетчик (образца 1995 года (-; ), формирующий на странице несколько картинок-цифр в соответствии с реальным (или накрученным) количеством посетителей. Алгоритм этой задачи можно обрисовать так: скрипт проверяет IP-адрес+текущую дату следующего посетителя, сравнивая с имеющимися в файле записями, и увеличивает значение счетчика, дополняя файл, если такой хост еще не заходил, или если текущая дата сменилась. CGI-скрипт счетчика включается в HTML-код строкой вида:

<!--#exec cgi="/cgi-bin/counter.cgi"-->

Код счетчика на языке Perl:

#!/usr/bin/perl
use Time::localtime;

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

$ip=$ENV{'REMOTE_ADDR'};


#--------Beru datu
$tm=localtime();
$y=$tm->year;
$m=$tm->mon;
$d=$tm->mday;
$m++;
$y+=1900;
#-----------------

$curr=$d.$m.$y.":".$ip;

#print "Current status: $curr \n\n";

$yes=0;
open(COUNT, "count.dat") || die "Cannot open count.dat!!!\n";
while($str=<COUNT>)
	{
	chomp($str);


	if ($curr eq $str)
		{
		$yes=1;
		last;
		}
	}
close(COUNT);

open(CTR, "ctr.dat") || die "Cannot open ctr.dat file!!!\n\n";
$ctr=<CTR>;
close(CTR);

if (!$yes)
	{
	open(COUNT, ">> count.dat") || die "Cannot open count.dat for
writing!\n\n";
	print COUNT "$curr\n";
	close(COUNT);
	$ctr++;
	open(CTR, "> ctr.dat") || die "Cannot open ctr.dat for writing!\n\n";
	print CTR "$ctr";
	close(CTR);

	#-------------risujem counter---------------

	$zeros="0"x(6-length($ctr));
		$ctr=$zeros.$ctr;

	@counter=($ctr=~m/(.)/gi);

	foreach(@counter)
		{
		$image="img/".$_."OCR.GIF";
		print "<img src="$image">";
		}


	#--------------------------------------------
	}
else
	{
	$zeros="0"x(6-length($ctr));
	$ctr=$zeros.$ctr;

	@counter=($ctr=~m/(.)/gi);

	foreach(@counter)
		{
		$image="img/".$_."OCR.GIF";
		print "<img src="$image">";
		}


	}

Используются два файла: counter.dat, в котором хранятся записи вида IP+Date и ctr.dat, где хранится текущее число посетителей. Можно было обойтись одним первым файлом, но не стоит забывать, что файл текстовый, а значит, его размер будет непрерывно расти, и нам потребуется периодически стирать записи, сделанные ранее. Картинки для счетчика представляют собой просто цифры от 0 до 9, и берутся из директории img на сервере. Надо заметить, что последнее время многие Web-мастера отказываются от использования SSI, прибегая к другим методам включения. Ведь можно просто вставить такую динамическую картинку:

< img src="/cgi-bin/image.cgi" >

при этом в CGI-скрипте использовать тип данных image/gif (или png, jpg ...). Основная проблема заключается в генерации картинки CGI-программой. Здесь тоже есть решение - графическая библиотека. Подключив такую объектно-ориентированную графическую библиотеку можно не только создавать изображения основными средствами (геометрические фигуры, кисти, шрифты), но и редактировать уже готовые.




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / SSI /

SSI - Server-Side Includes - включения на стороне сервера. Практическое использование SSI. Часть 4
21-04-2010   

А вот как выглядит на самом деле файл, который вы воспринимаете, как обычный HTML документ (он сокращен для удобства восприятия):... подробнее

Кол. просмотров: общее - 2890 сегодня - 1

SSI - Server-Side Includes - включения на стороне сервера. Практическое использование SSI. Часть 3
19-04-2010   

Следующий пример иллюстрирует, как с помощью SSI собираются страницы в Кладовой WebClub.ru. Их особенность заключается в наличии повторяющихся блоков одинаково оформленного текста. Достигается это использованием трех шаблонов... подробнее

Кол. просмотров: общее - 2771 сегодня - 1

SSI - Server-Side Includes - включения на стороне сервера. Практическое использование SSI. Часть 2
19-04-2010   

Теперь приведем пример файла, вставляемого в начало каждого документа сервера http://www.citforum.ru/. Особенностью сервера является то, что каждый раздел имеет свой базовый цвет, и все это создается этим единственным файлом... подробнее

Кол. просмотров: общее - 2613 сегодня - 1

SSI - Server-Side Includes - включения на стороне сервера. Практическое использование SSI
19-04-2010   

Первым распространенным применением SSI является внедрение в документ некоего динамического куска разметки... подробнее

Кол. просмотров: общее - 2791 сегодня - 0




  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects