Общая таблица статистики
id |
pokaz_1 |
… |
pokaz_31 |
click_1 |
… |
click_31 |
m_1 |
… |
m_12 |
с_1 |
… |
с_12 |
id – ключевое поле;
pokaz_1 … 31 – в какой день сколько раз был показан баннер;
click_1 … 31 – в какой день сколько раз нажали на баннер;
m_1 … m_12 – показы баннера за каждый месяц;
с_1 … с_12 – клики на баннер за каждый месяц.
Ежедневная таблица статистики
id – ключевое поле;
pokaz – сколько раз был показан баннер в течение дня;
click – сколько раз нажали на баннер в течение дня.
Алгоритм ротации баннеров состоит из двух
частей:
1. Показ баннера (рисунок 1).
2. Действий выполняемых после клика на баннер
(рисунок 2)
Рисунок 1. Показ баннера
Рисунок 2.
Действия, выполняемые после клика на баннер
Код баннера будет включаться в страницу сайта с помощью функции на РНР (если сайт расположен на том же хостинге, что и скрипт ротации) или с помощью SSI. При генерации страницы сервером скрипт берет из таблицы показа(ротации) баннеров порядковый номер баннера, который выводится в данный момент, потом из таблицы групп баннеров выбирается номер баннера, который необходимо показать. По этому номеру из таблицы характеристик баннеров формируется необходимый код баннера. Генерация кода баннера выполняется по следующему принципу: если баннер графический, то из таблицы выбираются его расположение, ширина, высота, бордюк, alt-текст, способ открытия страницы спонсора, и по этим данным генерируется стандартный html код вывода картинки. Если баннер
нестандартный, то код баннера, который хранится в текстовом файле, вставляется
в страницу. Нестандартные баннеры будут храниться в текстовых файлах, а
не в таблице MySQL (как например у phpAdsNew), что даст прирост в производительности, если MySQL сервер установлен на другом хостинге. После вывода
баннера в дневную таблицу статистики добавляется показ баннера.
При клике на баннер в дневную таблицу статистики также добавляется клик, и в соответствии со способом открытия(_blank, self и тд) страницы спонсора происходит
редирект на спонсора.
Один раз в сутки происходит перекидывание данных из таблицы дневной статистики
в таблицу общей статистики, и таблица дневной статистики обнуляется. Это
возможно выполнять с помощью cron, но так как на многих спонсорских хостингах не cron, то данную операцию можно выполнить следующим образом:
1) Конфигурационные данные для работы скрипта (адрес MySQL сервера, логин, пароль и тд) записываем в отдельный файл (например my_config.php). Эти данные используются скриптом каждый раз при запуске.
2) При запуске скрипт проверяет дату, когда в последний считывался файл конфигурации, если сегодняшняя дата не совпадает с полученной датой – выполняем операцию по переброске статистики.
При использовании данного способа возможны следующие нюансы: логичным при написании скрипта было бы использовать функцию fileatime, которая получает время последнего доступа к файлу. Но читаем руководство по РНР: „atime файла изменяется, когда читаются блоки данных файла.
Это может быть довольно затратно, если приложение регулярно выполняет доступ
к большому количеству файлов и директорий. Некоторые файловые системы Unix
могут монтироваться с отключенными обновлениями atime для увеличения производительности таких приложений. В таких файловых системах эта функция будет бесполезна”. На что я и нарвался, когда тестировал написанный мной скрипт на хостинге HQhost (реклама: HQhost – хостинг настроенный на максимальное быстродействие).