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

Тема в разделе "Как сделать...", создана пользователем silmarion, 6 фев 2016.

  1. silmarion

    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 к примеру вести учет.

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

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

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

    warg Постоялец

    Регистр.:
    26 июн 2007
    Сообщения:
    125
    Симпатии:
    139
    конкретно в этом много чего нужно править :)

    сам использовал
    https://www.revive-adserver.com/
    достаточно мощный по функционалу бесплатный скрипт
     
  3. pt1p

    pt1p Создатель

    Регистр.:
    13 апр 2016
    Сообщения:
    17
    Симпатии:
    1
  4. PetIex

    PetIex Создатель

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

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

    pt1p Создатель

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

    PetIex Создатель

    Регистр.:
    12 июн 2018
    Сообщения:
    3
    Симпатии:
    1
    Revive - это как я понимаю старый openx, лет 8 назад мы его так и не смогли нормально юзать он очч прожорлив, все что я написал касается самописной версии сервера. Я почитаю чуть позже доку, на предмет оптимизации может быть что то и поменялось и отпишу.
     
  7. PetIex

    PetIex Создатель

    Регистр.:
    12 июн 2018
    Сообщения:
    3
    Симпатии:
    1
    Не умеет он из коробки тюнится для работы с redis
     
  8. pt1p

    pt1p Создатель

    Регистр.:
    13 апр 2016
    Сообщения:
    17
    Симпатии:
    1
    Я работаю с redis я прошу плагин для redis для revive adserver. Я нашел его и его испробовал. Только от 2-3 дней изучаю revive-adserver и уже знаю почти все о нем. Это форум для помощи...
    http://documentation.adserverplugins.com/redis-caching-plugin/
    http://documentation.adserverplugin...s/how-to-install-a-plugin-in-revive-adserver/