Общая организация системы баннеров
В каталоге path1 для каждого обслуживаемого сайта должен храниться файл счетчиков, где хранятся сведения о количестве показов каждого банера и количестве сделанных по нему переходов, а также дополнительная информация. Например, для информации о банерах на сайте с номером 0014 предназначается файл с именем 0014.cnt.
В каталоге path2 для каждого обслуживаемого сайта хранится персональная база данных (в данном случае MySQL), где фиксируется информация о показе баннеров и сделанных по ним переходах. Например, для сайта с номером 0014 создается файл базы данных 0014.bd.
В подкаталогах 1, 2, 3 ... каталога path3 хранятся наборы баннеров, показываемые на страницах сайтов, принадлежащих Клиентам. Например, Заказчик может предоставлять Клиенту на выбор размещение наборов банеров для корпоративных сайтов, сайтов осуществляющих продажу через Интернет, государственных сайтов, образовательных и научных сайтов, персональных страниц и т.д. В каждом из упомянутых подкаталогов помимо собственно картинок имеется файл info, в котором каждой такой картинке поставлен в соответствие определенных адрес URL, куда будет переадресован посетитель, если он щелкнет по соответствующему баннеру. Информация о том, какой тип баннеров будет представлен на том или ином сайте, представлена в соответствующем файле счетчиков.
Формат файла счетчиков:
Файл счетчиков представляет собой текстовый файл, состоящий из записей и комментариев. Строки коментариев начинаются с #. Записи начинаются с номера баннера, за которым через пробел (несколько пробелов) указывается имя соответствующего графического файла, далее сообщается количество его показов. И наконец, заканчивается строка записью о количестве переходов. Нумеруются баннеры как 1, 2, 3 и т.д. Строки файла отсортированы в порядке возрастания номера баннера.
После того или иного обновления в наборе баннеров должна оператором запускаться специальная процедура (ее также необходимо разработать), которая добавляет (удаляет) соответствующие записи в файлах счетчиков, где упоминается откорректированный набор баннеров.
Строки комментария могут хранить сведения о сайте Клиента, а также дополнительную служебную информацию. Например, в строке
#banner_set 8
сообщается, что для данного сайта будут использоваться баннеры из 8-го набора (из каталога ”path3/8”).
Формат файла info
В файле info описывается соответствующий набор баннеров. Каждому отдельному баннеру выделяется отдельная строка, в которой через пробел указывается имя графического файла с изображением баннера и URL адрес, куда посетитель будет переадресован, если он щелкнет по данному баннеру.
Порядок обработки запроса
Выбор баннера
В общем случае задача заключается в том, чтобы для посетителя данного сайта из соответствующего набора произвольным образом выбрать и показать тот или иной баннер. Если посетитель щелкнет по этому баннеру, то найти соответствующий адрес URL и переадресовать посетителя на него.
При этом возникают задачи:
Номер показываемого баннера должне являться функцией от аргумента id, который в свою очередь состоит из номера хоста и времени, когда посетитель открыл страницу с баннером. Например, если посетитель сайта с номером 0014 в 15 часов 13 минут 46 секунд открыл соответствующую страницу, то либо его браузер, либо сервер клиента должны сформировать запрос на получение баннера, снабдив его параметром id=00141346. Если посетитель в 15 минут 7 секунд откроет эту страницу еще раз, то запрос на получение баннера будет снабжен уже параметром id=00141507. Получив запрос с таким параметром, сервер Заказчика с помощью какой-либо хэш-функции определяет номер требуемого баннера и передает его графический образ на браузер посетителя (очень вероятно, что параметрам id=00141346 и id=00141507 будут соответствовать баннеры с разнями номерами).
Сервер Заказчика не должен помнить, какие баннеры каким посетителям были посланы. Об этом должны заботиться браузер самого посетителя или сервер Клиента. Иными словами, на просматриваемой странице тем или иным образом должна быть сформирована комбинация
<a href=”http://someserver.ru/cgi-bin/url.pl?id= 00141346”>
<img src=”http://someserver.ru/cgi-bin/banner.pl?id= 00141346”>
</a>
Таким образом, скрипт banner.pl на сервере Заказчика должен находить и передавать на браузер посетителя изображение баннера, а скрипт url.pl с тем же праметром id должен предоставлять URL-адрес, соответствующий выбранному баннеру.
Следует предусмотреть несколько механизмов выбора параметра id:
Второй и третьий методы более предпочтительны для сервера Клиента, поскольку будут осуществлять выбор баннера даже если в браузере посетителя отключена поддержка JavaScript.
Порядок работы с баннером
Получив запрос на показ баннера, программа (CGI-скрипт) на сервере Заказчика должнаРаз в неделю следует удалять из баз даных все записи месячной давности.
Процедура определения IP-адреса посетителя. Обычно IP-адрес определяется по значению параметра REMOTE_ADDR. Однако, если посетитель пользуется proxy-сервером, то воможны ситуации, когда в этом параметре будет записан адрес прокси-сервера. Поэтому прежде чем принимать в качестве адреса значение этого параметра, следует проверить, присутствует ли параметр HTTP_FORWARDED, или нечто со словом “FORWARD”, имеющее значение, которое могло бы быть IP-адресом. В таком случае в качестве искомого адреса следует брать значение этого параметра.
Предусмотреть вариант невидимого счетчика, когда на браузер посетителя передается не динамически сформированный образ, а просто небольшой полностью прозрачный рисунок GIF. “Невидимые” счетчики обслуживает скрипт /cgi-bin/counter1.pl, полностью эквивалентный в функциональном плане скрипту counter.pl.
С помощью механизма семафоров следует предусмотреть защиту от конфликтов между несколькими одновременно сделанными запросами во время обращения к базе данных или счетчику.
Разработка интерфейса, с помощью которого Клиент может получить отчет со статистическими данными о работе счетчиков на своем сайте, в рамки данного технического задания не входит.
Дополнительные требования
Приложение
Примеры скриптов, обслуживающих счетчики:
Пример управления счетчиком: