программирование на PHP
Bullet (black) Email иконка RSS иконка
  • Урок 4. Статистика на сайте. Пишем скрипт счетчика посещений.

    Июнь 24th, 2008 Александр 92 Комментариев

    Введение

    Наверняка многие из вас посещая различные сайты, обращают внимание на счетчики, которые стоят на сайтах. Статистика показывает нам сколько человек посетило ресурс, сколько страниц был отгружено, сколько человек находятся на сайте в текущий момент и тд. Все это является очень полезным инструментом, т.к. как позволяет узнать владельцу сайта, востребованность и рейтинг его ресурса. Чем интересней и полезней ресурс, тем больше у него посещений.

    На данный момент существует огромное количество сервисов, которые предлагают  нам много инструментов для сбора статистики и данных, а также  их анализа. Все они очень профессионально выполняют свои задачи,но все когда то начиналось с самописного счетчика, которые можно встретить и сейчас.

    Если вы хотите понять как происходит учет пользователей, я подготовил урок, в котором я
    напишу счетчик посещений сайта, объясню как установить счетчик на сайт и использовать данные
    в своих целях.

    Детали

    Для того чтобы нам написать простенький счетчик нам придется узнать несколько новых функций.

    • Работа с файлами (создание/чтение/запись);
    • Работа с сессиями;
    • Работа с функциями для создания изображения;
    • Подключение счетчика;

    Мы рассмотрим три варианта:

    • Текстовый счетчик хитов;
    • Текстовый счетчик посетителей;
    • Графический счетчик посетителей;

    Начало

    Создайте в папке www, папку counter. Это будет место для хранения файла статистики и скрипта. Далее я приведу несколько вариантов счетчиков.

    Вариант 1

    Чтобы использовать счетчик , нам необходимо создать html-страницу, в которую мы встроем скрипт. Пусть это будет простая страница, которая содержит информацию.

    index.php
    [cc lang="html"]

    Добро пожаловать


    [/cc]
    Сохраним эту страницу в папке www и перейдем к программированию счетчика.

    counter.php

    Чтобы сохранять полученные данные, нам необходимо их куда то записывать, пусть для начала это будет простой текстовый файл с именем stat.txt.

    [cc lang="php"]

    $url = "counter/stat.txt";
    [/cc]

    Переменной $url присвоен адрес до файла. Это является, единственный конфигурационный элемент, в котором мы задаем нужные данные, далее скрипт состоит из логических выражений else if и функций работы с файлами

    Этот фрагмент кода отвечает за проверку на наличие файла, весь ход логических действий я
    прописал в комментариях.

    [cc lang="php"]
    if(!file_exists($url)) { //Проверка на существование файла.

    //Если файла не существует,
    $count = 0;
    $handle = fopen($url,”a”);//создаем его,
    fwrite($handle,$count);// и записываем нулевое значение
    fclose($handle);//Закрываем файл

    }
    [/cc]

    Далее опишем условие, когда файл создан.

    [cc lang="php"]
    else { //Если файл существует, то работаем с ним

    $handle = fopen($url,”a+”); //Открываем его
    $count = fread($handle,filesize($url)); //Читаем данные и присваеваем их переменной $count
    fclose($handle); //Закрываем

    $count++;//Добавляем одно посещение к полученному выше

    $handle = fopen($url,”w”); // Открываем файл, и урезаем его до нулевой длины
    fwrite($handle,$count); //Записываем переменную $count
    fclose($handle); //Закрываем

    }
    [/cc]

    В этом фрагменте как раз описан скрипт счетчика посещений, внимательно смотрите, в первом фрагменте мы открываем файл для того чтобы его открыть и узнать количество посещений. Далее мы увеличиваем полученное значение на 1 единицу ( $count++;) и записываем это значение в наш файл.

    В конце файла мы выводим статистику при помощи оператора echo

    [cc lang="php"]
    echo “количество просмотров: $count “;

    ?>
    [/cc]

    Мы рассмотрели самый простой тип счетчика, но поверьте, иногда сложнее и не требуется, например нам необходимо узнать количество прочтений страницы(статьи, объявления) внутри сайта. Обычно это указывает посетителям сайта наиболее интересный материал. Далее чтобы этот счетчик заработал, открываем наш файл index.php, и добавляем строчку до тэга </body>

    [cc lang="php"]


    [/cc]

    Результат обращения к странице (http://127.0.0.1/index.php) должен быть следующим:

    [+] Плюсы

    • Простота установки
    • Не требует БД

    [-] Минусы данного счетчика:

    • Легко накручивается простым обновлением страницы (F5) .
    • Если несколько человек одновременно обратятся к скрипту, возникнет ошибка.Т.к. файл открыт и используется кем то другим, поэтому необходимо дополнить скрипт.
    • Если будет удален файл с данными, то вы потеряете накопленную статистику

    Вариант 2

    Счетчик учитывающий только посетителей. Что это значит? Посетители – это количество пользователей, которые посетили ваш ресурс, например за сутки, причем если даже человек будет обновлять страницу
    значение посещений прибавляться не будет.

    Чтобы создать такой счетчик, нам необходимо научиться работать с сессиями. В чем смысл? Если человек посещает ваш сайт впервые, то создается сессия, которая работает до тех пор, пока человек не закрыл браузер, т.е. при последующих перезагрузках страницы (F5) либо переходах по сайту, мы будем проверять создана ли сессия. Если сессия существует, то учитывать пользователя не будем.

    Данный вариант является немного усовершенствованным по сравнению с первым вариантом.

    index.php
    [cc lang="php"]

    Добро пожаловать



    [/cc]
    Обратите внимание на начало файла, функция session_start() инициализирует сессию.

    counter.php
    В этом фрагменте по сравнению с первым оставляем все без изменений

    [cc lang="php"]

    $url = "counter/stat.txt";

    if(!file_exists($url)) {

    //Если файла не существует, создаем его, и записываем нулевое значение
    $count = 0;
    $handle = fopen($url,"a");
    fwrite($handle,$count);
    fclose($handle);

    }
    [/cc]
    Здесь тоже, только читаем файл, и получаем количество посещений.Далее смотрите внимательней
    [cc lang="php"]
    else {

    //Если файл существует, то работаем с ним
    $handle = fopen($url,"a+");//Открываем его
    $count = fread($handle,filesize($url)); //Читаем данные и присваеваем их переменной $count
    fclose($handle);

    [/cc]

    Создаем условие, если сессия отсутствует , то это значит человек посещает страницу в первый раз, поэтому переменной $_SESSION['count'] присваиваем какое то значение, которое проверяется в начале условия, далее к переменной $count добавляем единицу, и записываем её обратно в файл, причем для начала запираем доступ к нему, производим запись и открываем доступ.Это нужно для того чтобы в момент обращения нескольких посетителей к скрипту не возникало ошибок.

    [cc lang="php"]
    if (!isset($_SESSION['count'])) { //Если сессия отсутствует
    $_SESSION['count'] = 1; //Создаем её
    $count++; //Добавляем единицу к переменной

    $handle = fopen($url,”w”);

    if (flock($handle, LOCK_EX)) {
    fwrite($handle,$count);//Записываем её в файл
    flock($handle, LOCK_UN); // отпираем файл
    } else {
    echo “Повторите позднее”;
    }

    fclose($handle);
    }

    }

    //Выводим количество просмотров.

    echo “количество просмотров: $count”;
    ?>
    [/cc]

    Теперь я обьясню, почему при нажатии F5 не добавляется посещение.Так как при первом посещении мы создаем сессию, то в результате проверки if(!isset($_SESSION['count']) выражение вернет значение FALSE, следовательно ничего прибавлять и записывать не будем.

    [+] Плюсы

    • Простота установки
    • Не требует БД
    • Не накручивается обновлением страницы
    • При обращении скрипта нескольких человек одновременно, не возникает ошибки.

    [-] Минусы данного счетчика:

    • Если будет удален файл с данными, то вы потеряете накопленную статистику

    Бонус

    В этом варианте мы рассмотрим скрипт, который будет строить графическую картинку, на которой будет отображаться количество посетителей. Для этого нам нужна подложка для нашего счетчика, это должно быть изображение формата jpeg, для тестирования можете взять эту.

    Далее нам необходимо доработать второй вариант, и добавить ещё один файл,
    который будет отвечать за построение картинки.

    index.php
    Оставляем без изменений

    counter.php

    Находим в конце строчку
    [cc lang="php"]
    echo “количество просмотров: $count”;
    [/cc]
    и заменяем её на
    [cc lang="php"]
    echo ‘stat‘;
    [/cc]

    img.php
    Здесь находиться набор функций по работе с изображениями
    [cc lang="php"]
    // Подложка для счетчика
    $im = ImageCreateFromJpeg("bg.jpg");

    // Цвет текста
    $black = imagecolorallocate($im,255,255,255);

    // Отрисовка текста
    imagestring($im,1,8,4,$_GET['s'], $black);

    Header("Content-type: image/jpeg");
    //Вывод изображения
    ImageJpeg($im);
    //Разрушаем изображение, чтобы не засорялась память
    imagedestroy($im);
    ?>
    [/cc]
    Все эти три варианта обязательно пригодятся в будущем.

    На странице должен появиться вот такой счетчик:

    [+] Плюсы

    • Простота установки
    • Не требует БД
    • Не накручивается обновлением страницы
    • При обращении скрипта нескольких человек одновременно, не возникает ошибки.
    • Красивый, настраиваемый внешний вид.

    [-] Минусы данного счетчика:

    • Если будет удален файл с данными stat.txt, то вы потеряете накопленную статистику

    Исходники

    counter.zip

    Заключение

    Я думаю все что я сегодня написал не так уж и сложно и написание счетчика на php не отнимет у вас много времени на изучение.
    Все описанные варианты можно с легкостью применять на практике, для того чтобы вывести счетчик просто поместите код <?php @include(counter.php); ?> в нужное место, а если будут возникать какие то вопросы, можете оставлять их в камментах, обязательно обьясню и подскажу.

    Google Bookmarks БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong
    rss-лентаПодпишись на RSS, впереди много интересного.

    92 Responses to “Урок 4. Статистика на сайте. Пишем скрипт счетчика посещений.”

    Страницы: « 10 9 [8] 7 6 5 4 3 2 1 » Show All

    1. 80
      АлександрNo Gravatar Says:

      Тут зависит от структуры вашего сайта. Можно использовать несколько файлов, а можно одну базу данных, в которой отдельный счетчик будет отдельным рядом со своим определенным айдишником. Но в варианте с базой надо много чего учесть, поэтому советую для таких целей использовать вариант с отдельными файлами. Единственный минус – нельзя собрать общую статистику по страницам в одном месте ( точнее можн, но не без геморроя).

    2. 79
      ЕвгенийNo Gravatar Says:

      Добрый день, хотел бы уточнить один вопрос. Я хочу вести статистику по страницам отдельно (т.е. на какую страницу именно заходили чаще)-как мне это лучше сделать отдельными файлами, или в один файл, но через “параметр -> счетчик”, хотел бы узнать Ваше мнение!

    3. 78
      DimaNo Gravatar Says:

      Пока своими мозгами думать не научитесь – так и будете по урокам как по учебнику всё делать.
      А работать с файлами новичкам – вообще непозволительная роскошь. Через них сайт взламывается куда проще, чем через БД.
      Учите с БД работать сначала, а уж потом с файлами.

    4. 77
      АлександрNo Gravatar Says:

      Да, вы правы. Какое то время на сайте использовался плагин для подсветки кода, который все кавычки менял на другие, в итоге много было жалоб что нихрена не работает :) . Поэтому ВНИМАНИЮ ВСЕХ, проверяйте кавычки!!!

    5. 76
      IlidanNo Gravatar Says:

      Возможный способ исправить глюк с неотображающимися картинками: в файле img.php удалить все до “” – все тэги каменты и особенно пустые строки и пробелы. Кстати, у автора именно так и сделано.

    6. 75
      АлександрNo Gravatar Says:

      Создайте ручками. Причина может крыться в правах доступа на папку ( CHMOD ) , попробуйте поставить 0777 на ту папку, где будет создаваться файл stat.txt

    7. 74
      АлександрNo Gravatar Says:

      Необходимо разработать целую систему. Начиная от регистрации партнера, до учета “реальных” посетителей. Если у вас коммерческий продукт, то могу проконсультировать вас полностью по этому вопросу. Пишите через контакт

    8. 73
      ЕкатеринаNo Gravatar Says:

      C рисунком ничего не получилось. Картинка не отображается, отображается только alt, опечаток нет, в путях ошибок нет, в php.ini все впорядке.
      Из ваших исходников тоже не работает.
      В чем еще может быть дело?

    9. 72
      МихаилNo Gravatar Says:

      Здравствуйте.
      у меня почему-то не создается файл stat.txt в 1м варианте.
      в итоге выводится только Добро Пожаловать.
      А в уроке 5 для гостевой файл data.txt создаётся!
      Почему так? :)

    10. 71
      ЮрийNo Gravatar Says:

      Александр, подскажите пожалуйста как учитывать статистику посещений в партнерской программе. Т.е. у меня, к примеру, есть партнеры, которые имеют реф.ссылки вида http://www.имя_сайта.ru?p=ID. Как мне учитывать посещения имеено конкретного партнера?

    Страницы: « 10 9 [8] 7 6 5 4 3 2 1 » Show All

    Leave a Reply


freshcoder.ru © 2008 • При использовании материалов активная ссылка на сайт обязательна.