Главная » PHP » Про баннеры
Про баннеры
Не секрет, что в наше время Интернет-странички просто переполнены графикой. Без этого уже трудно представить себе какой-нибудь популярный проект. Часть этой графики является дизайном сайта, и с этим мы предпочитаем мириться. Другая часть – это баннеры, рекламная информация других сайтов в виде графической (часто даже анимированной) картинки. Это иногда раздражает, иногда выводит из себя, а иногда может оказаться полезным, так как хорошо сделанный баннер привлекает внимание и к себе и к рекламируемому ресурсу. Но в этой статье разговор пойдет не о самих баннерах, а о системах управления ими.
Если Вам удалось сделать хороший, полезный и посещаемый Интернет-проект, значит, Вы неизбежно сталкивались с баннерами. Часто другие Web-мастера сами предлагают обмен, иногда самому хочется поставить свой баннер на каком-либо ресурсе. Но в любом случае очень полезно иметь информацию о том, сколько раз Ваш баннер был показан и показывается ли он вообще. Это избавит от необходимости раз в неделю (день, месяц, год…) проверять, работает ли Ваш баннер на чужом сайте или давно удален. Конечно, обойтись средствами HTML тут просто невозможно, поэтому приготовьтесь программировать. Хорошо бы для программирования выбрать один из языков, работающих на стороне сервера. Это избавит посетителя от постоянного перекачивания к браузеру массы информации, причем при каждом посещении. Предлагаю Вам попробовать несложный скриптовый язык программирования РНР.
Самое главное, что Вам обязательно понадобится – это поддержка РНР Вашим сервером, где расположен Ваш сайт. Без этого, к сожалению, ничего не получится. Но PHP – язык распространенный, и поддерживается он большинством серверов в сети, за
исключением очень многих бесплатных.
Первое, что надо сделать – это определиться с кодом Вашего баннера и с самим баннером. Код выглядит, как правило так:
<a href="http://myhost.com">
<IMG SRC="http://myhost.com/baner.gif"
alt="Мой баннер" border="0"></a>
Конечно, это только шаблон, но с него мы сможем построить то, что нам будет нужно. А нужно нам будет знать, сколько раз показывается тот или иной баннер на определенном сайте. И желательно – время последнего показа. Для этого надо выделить один файл, который будет работать базой данных. Структура сайта выглядит следующим образом – каждая строчка соответствует одному из сайтов, на котором показывают Ваши баннеры. Разделителем между строками является, как и обычно, перевод строки. Разделителем в самой строке между информационными данными можно выбрать символ ^ (это на клавиатуре Shift+6). Этот символ не встречается в
адресной строке браузера, и нам очень даже подходит.
Структуру строки файла базы данный выберем вот так:
Адрес ^ время последнего посещения ^ количество посещений
Таким образом получается три поля, которые нужно в дальнейшем будет менять в зависимости от того, откуда вызывается баннер. Для того, что бы это знать, надо ввести в код баннера один параметр – идентификатор сайта. Для каждого из сайтов, участвующих в баннерообмене, идентификатор должен быть различным. И кроме того, для того, что бы обработать этот идентификатор, Вам потребуется вызывать не сам баннер, а специальный скрипт PHP, который сначала обработает все данные, а затем выведет на экран нужный баннер. Вот что у нас получилось из кода баннера:
<a href="http://myhost.com">
<IMG SRC="http://myhost.com/baner.phtml?id=1"
alt="Мой баннер" border="0"></a>
Как видите, поменялось имя файла и добавился параметр id. Теперь вызывается не непосредственно сам баннер, а скрипт baner.phtml, который и ведет статистику показов и времени посещения. В конце скрипта должен обязательно быть переход на баннер вот в таком виде:
header ("Location: baner.gif");
Теперь давайте перейдем к вопросу о ведении статистики. Несложно сделать просто подсчет показов, так как задача эта тривиальна – достаточно считать в массив базу данных посещений, и затем увеличить на 1 ячейку массива с индексом, соответствующим переменной id. Это наш идентификатор. Но у нас более сложная задача – организовать возможность просмотра всей статистики в дальнейшем и запоминать время последнего показа баннера. Значит, надо записывать в базу и время, и адрес сайта, с которого вызывается баннер. Адрес мы будем запоминать только для того, что бы в дальнейшем можно было узнать статистику показов, а в самой процедуре подсчета он не участвует.
Итак, начали. Наш скрипт, прежде всего, должен проверить на правильность полученную переменную id. Если она не больше установленного значения и не меньше ноля, то все нормально, иначе присваиваем переменной id ноль, или выводим сообщение об ошибке. Кому как нравится. Значение переменной id с индексом ноль нужно специально зарезервировать для таких вот ошибок, и всегда будет ясно – кто-то разместил не правильный код или допустил в нем ошибку при наборе. Но, если же все нормально, а так чаще всего и будет, скрипт должен считать в память файл с базой данных:
$adds = "url.txt";
$txt = file($adds);
Вся информация оказывается в массиве с именем $txt. Идентификатор указывает на тот индекс, где в массиве расположены данные сайта, с которого вызван баннер. Обратиться к этим данным очень просто:
$str = trim(str_replace (" ","", $txt[$id]));
Хорошо бы проверить, есть ли такая учетная запись, но это по желанию. Дальше надо разложить информацию на три составляющих – адрес, время последнего доступа и количество показов. Вот как это проще всего сделать:
list ($add, $time, $counter) = split ("^", $str);
Вот тут нам и пригодился наш разделитель. Все, вся информация извлечена, теперь ее надо обновить и записать обратно. Собственно, нужно просто увеличить переменню $counter на единицу, считать текущее время и присвоить переменной $time его значение. Если со счетчиком все ясно, то время требует пояснения. Лучше и проще всего считывать его в Unix-овском формате. Полученное значение будет равно количеству секунд, прошедшему после 1 января 1970 года. Ну, так уж принято, хоть и немного странно для простого пользователя. Но, нам важно, что это число секунд очень легко преобразуется в дальнейшем в конкретные даты, а хранить его очень просто, так как это, по сути, просто большое число. Его получить можно так:
$time = time(void);
$counter++;
Заодно увеличили показания счетчика. Все – теперь осталось только записать всю информацию обратно. Суммируем строку, и заносим полученное значение в нужную ячейку массива:
$txt[$id] = $add."^".$time."^".$counter." ";
И тут тоже не забываем про наш разделитель и про перевод строки в конце для правильного считывания в дальнейшем. Осталось только записать весь массив в файл с базой данных, но для этого его надо сначала объединить в одну строку:
$str=implode("", $txt);
$fp = fopen($adds, "w");
if ($fp) { $fw = fwrite($fp, $str); fclose($fp); }
Вот и все, так как все поставленные нами задачи мы выполнили. Я намеренно не приводил всего кода скрипта целиком, а только по пунктам объяснял все шаги как можно подробнее. Я хотел бы, что бы Вы не занимались бездумным копированием, а постарались самостоятельно развить предложенные тут идеи. Но, что бы хоть как то компенсировать отсутствие в статье готового скрипта, я предлагаю Вам готовый скрипт вывода статистики на экран. Для этого достаточно вызвать в браузере файл stat.phtml. Вот его код:
<?
$adds = "url.txt";
$txt = file($adds);
$i = 0;
while ($i <= count($txt)):
$temp = trim(str_replace (" ","", $txt[$i]));
list ($add, $time, $counter) = split ("^", $str);
echo $add." – ".$counter." : ".$time."<br>";
$i++;
endwhile;
?>
Как видите, еще проще. Единственная трудность – перевести формат времени в разумный вид, но для этого существует масса хороших и не очень алгоритмов. Их Вы уже найдите сами – пусть это будет в качестве домашнего задания :-).
Рекомендуем почитать