Скрипт учета показов и кликов по баннеру

silmarion

Полезный
Регистрация
21 Июн 2012
Сообщения
194
Реакции
19
Всем привет
в общем задался таким вопросом, как правильно учитывать показ кликов и баннеров по баннерам на сайте.

Нашел вот такой вот скрипт

Код:
Скрипты показа баннеров, изложенные в этой статье довольно элементарны. Описания баннеров, количество кликов и показов хранится в текстовом файле, поэтому наличия MySQL не требуется.

Для начала создадим файл, в котором будем хранить всю информацию. Назовем его database.txt. Файл будет содержать записи следующего формата:
URL1|IMG1|NAME1|WH1|SHOW1|CL1
URL2|IMG2|NAME2|WH2|SHOW2|CL2
...
Где эти мистические слова означают следующее:
URL - ссылка баннера, куда будет переходить пользователь по клику;
IMG - имя файла изображения, которое будет выводится на экран;
NAME - alt-текст изображения;
WH - строка вида WIDTH=XX HEIGHT=XX, ширина и высота изображения; если все изображения одного размера, соответственно можно упростить скрипт;
SHOW - показы баннера, пишем изначально 0;
CL - клики по баннеру, пишем тоже 0;
Разделим логику на два файла. Один файл будет отвечать за показ баннера, назовем его banner_show.php, другой - за учет кликов по баннеру, назовем его banner_click.php. Пишем baner_show...
Сначала надо загрузить файл, в котором хранится описание баннеров:
<?
$array_bann = file ('database.txt');
Потом - инициализируем генератор псевдослучайных чисел, выбираем случайную запись из считанного файла, разделяем ее на элементы через признак "|" и заносим их в массив $data_bann.
srand((double)microtime()*1000000);
$pos = rand(0,sizeof($array_bann)-1);
$data_bann=explode ("|", $array_bann[$pos]);
Далее выводим на экран собственно сам баннер на основе данных из массива $data_bann;
echo "<a href=banner_click.php?banner=$pos target=_blank><IMG SRC='$data_bann[1]' ALT='$data_bann[2]' $data_bann[3] border=0></a>";
Увеличиваем счетчик показов баннера на единицу.
$data_bann[4]++;
Склеиваем измененную запись и записываем весь массив в файл;
$array_bann[$pos]=join('|',$data_bann);
$fp= fopen ('database.txt',"w");
flock($fp,3);
fwrite ($fp, join('',$array_bann));
fclose ($fp);
?>
Теперь займемся файлом banner_click.php. Открываем файл с данными.
<?
$array_bann = file ('database.txt');
В переменной $banner - у нас уже переданный из html-файла номер баннера, по которому кликнули. Берем запись, соответствующую этому номеру, опять разделяем ее на кусочки через "|" и заносим это в массив $data_bann.
$data_bann=explode ("|", $array_bann[$banner]);
Увеличиваем счетчик показов на единицу, склеиваем запись обратно в $array_bann.
$data_bann[5]=$data_bann[5]+1;
$array_bann[$banner]=join('|',$data_bann)."\n";
И записываем изменненный массив в файл database.txt.
$fp= fopen ('database.txt',"w");
flock($fp,3);
fwrite ($fp, join('',$array_bann));
fclose ($fp);
Отфутболиваем пользователя по адресу, хранящемуся в переменной $data_bann[0];
header("Location: http://$data_bann[0]");
?>
В заключение хочется добавить, что от накрутки кликов можно некоторым образом защитится, используя запись кукисов в одном скрипте и считывание их в другом.

В общем толком не работает, да и нужно мне не 1 рандомный баннер показывать, а нормально выводить баннера, и по их ID к примеру вести учет.

У кого есть что нормального по этой тематике?

В этом скрипте более-менее ведется учет лишь показов одного рандомного баннера из списка, с переходами что-то не так

Что я делаю не так, и что в этом скрипте нужно подправить, чтобы нормально выводить список баннеров, и вести нормальную статистику?
 
конкретно в этом много чего нужно править :)

сам использовал
Для просмотра ссылки Войди или Зарегистрируйся
достаточно мощный по функционалу бесплатный скрипт
 
Все зависит от нагрузки, самый простой вариант - использовать redis, 1 раз выгрузить все в память и брать баннеры оттуда, отдельный скрипт должен представлять собой пиксель - картинка 1x1 который ведет на скрипт учитывающий показы, с самого баннера бросать на скрипт учитывающий клик, который потом в свою очередь должен редиректить на страницу рекламы.
При больших нагрузках я б советовал использовать связку nginx+lua, а при очень больших - golang + fasthttp.

По поводу учета статистики, если данные будете хранить в mysql не пишите туда каждый клик а записывайте каждые к примеру 5 минут batch запросом либо используйте инкременты в redis
 
Последнее редактирование:
Все зависит от нагрузки, самый простой вариант - использовать redis, 1 раз выгрузить все в память и брать баннеры оттуда, отдельный скрипт должен представлять собой пиксель - картинка 1x1 который ведет на скрипт учитывающий показы, с самого баннера бросать на скрипт учитывающий клик, который потом в свою очередь должен редиректить на страницу рекламы.
При больших нагрузках я б советовал использовать связку nginx+lua, а при очень больших - golang + fasthttp.

По поводу учета статистики, если данные будете хранить в mysql не пишите туда каждый клик а записывайте каждые к примеру 5 минут batch запросом либо используйте инкременты в redis

Будет интерсно для меня, чтобы узнать о настрийките которые вы предлагаете.
1. Как настроить reidis для revive
2. Как установить и настроить nginx+lua для revive ad server
3. Как установить и настроить golang + fasthttp для revive ad server
 
Будет интерсно для меня, чтобы узнать о настрийките которые вы предлагаете.
1. Как настроить reidis для revive
2. Как установить и настроить nginx+lua для revive ad server
3. Как установить и настроить golang + fasthttp для revive ad server

Revive - это как я понимаю старый openx, лет 8 назад мы его так и не смогли нормально юзать он очч прожорлив, все что я написал касается самописной версии сервера. Я почитаю чуть позже доку, на предмет оптимизации может быть что то и поменялось и отпишу.
 
Revive - это как я понимаю старый openx, лет 8 назад мы его так и не смогли нормально юзать он очч прожорлив, все что я написал касается самописной версии сервера. Я почитаю чуть позже доку, на предмет оптимизации может быть что то и поменялось и отпишу.

Не умеет он из коробки тюнится для работы с redis
 
Не умеет он из коробки тюнится для работы с redis
Я работаю с redis я прошу плагин для redis для revive adserver. Я нашел его и его испробовал. Только от 2-3 дней изучаю revive-adserver и уже знаю почти все о нем. Это форум для помощи...
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
 
Назад
Сверху