Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Гостевая книга ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Бип из системно... 62720
Организация зап... 59869
Invision Power ... 59487
Приложение «Про... 58759
Оператор выбора... 57877
Модуль Forms 57756
Подключение Mic... 57119
Создание отчето... 57063
ТЕХНОЛОГИИ ДОСТ... 53358
Программируемая... 51205
Пример работы с... 49230
Имитационное мо... 48821
21 ошибка прогр... 43583
Реклама
Сейчас на сайте
Гостей: 12
На сайте нет зарегистрированных пользователей

Пользователей: 13,044
новичок: Denchik37
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование работы крупного аэропорта на GPSS + Пояснительная записка
Моделирование регулировочного участка цеха на GPSS + Пояснительная записка
Моделирование процесса поступления заявок в систему, состоящую из трёх Э...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании

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-программой. Здесь тоже есть решение -
графическая библиотека. Подключив такую
объектно-ориентированную графическую
библиотеку можно не только создавать
изображения основными средствами (геометрические
фигуры, кисти, шрифты), но и редактировать
уже готовые.

Опубликовал Kest October 31 2008 18:34:32 · 0 Комментариев · 6361 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Программирование ...
Фундаментальные а...
Приемы программир...
TDBF
TMS
DS_Group
PHP 5 для "чайников"
Защита от спама ...
Распознавание тек...
PrevInst
Факториал [Исходн...
ЯЗЫК ПРОГРАММИРОВ...
Основы программир...
Приложение Клиент...
Billenium Effects...
Animated Menus
Ehlib
Domen Name IP
Функции Visual Basic
Дешифратор содерж...

Топ загрузок
Приложение Клие... 100333
Delphi 7 Enterp... 79891
Converter AMR<-... 20025
Borland C++Buil... 10828
GPSS World Stud... 9762
Borland Delphi ... 7855
Turbo Pascal fo... 6910
Visual Studio 2... 4926
Калькулятор [Ис... 4133
FreeSMS v1.3.1 3488
Случайные статьи
Обобщенное програм...
Описание предметно...
Язык С: альтернати...
Моделирование диск...
Способы обнаружени...
Игровые автоматы д...
Общение в ICQ
Определение шаблон...
Описание абстрактн...
ПРИЛОЖЕНИЕ F. СИС...
систем безопасност...
Венгерский язык. М...
Семантика UNIX 445
Бюджеты и инфографика
Тур в Львов
Снова интерфейс и ...
НЕ ВСЕГДА БАЗА ДАН...
Программное обеспе...
Задание: определит...
Диалоговое окно Re...
Основные препятств...
Логическое «НЕ»
Иерархические стру...
Настройка параметр...
Вход в SQL*PLUS. ...
Статистика



Друзья сайта
Программы, игры


  • Сервис корейских авто
  • Автосервис автомобилей немецкого, японского и корейского производства
  • восточный-нн.рф
Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?