-
Урок 4. Статистика на сайте. Пишем скрипт счетчика посещений.
Июнь 24th, 2008 92 КомментариевВведение
Наверняка многие из вас посещая различные сайты, обращают внимание на счетчики, которые стоят на сайтах. Статистика показывает нам сколько человек посетило ресурс, сколько страниц был отгружено, сколько человек находятся на сайте в текущий момент и тд. Все это является очень полезным инструментом, т.к. как позволяет узнать владельцу сайта, востребованность и рейтинг его ресурса. Чем интересней и полезней ресурс, тем больше у него посещений.
На данный момент существует огромное количество сервисов, которые предлагают нам много инструментов для сбора статистики и данных, а также их анализа. Все они очень профессионально выполняют свои задачи,но все когда то начиналось с самописного счетчика, которые можно встретить и сейчас.
Если вы хотите понять как происходит учет пользователей, я подготовил урок, в котором я
напишу счетчик посещений сайта, объясню как установить счетчик на сайт и использовать данные
в своих целях.Детали
Для того чтобы нам написать простенький счетчик нам придется узнать несколько новых функций.
- Работа с файлами (создание/чтение/запись);
- Работа с сессиями;
- Работа с функциями для создания изображения;
- Подключение счетчика;
Мы рассмотрим три варианта:
- Текстовый счетчик хитов;
- Текстовый счетчик посетителей;
- Графический счетчик посетителей;
Начало
Создайте в папке www, папку counter. Это будет место для хранения файла статистики и скрипта. Далее я приведу несколько вариантов счетчиков.
Вариант 1
Чтобы использовать счетчик , нам необходимо создать html-страницу, в которую мы встроем скрипт. Пусть это будет простая страница, которая содержит информацию.
index.php
1
2
3
4
5
6
7
8
9
10
11<html>
<head>
<title>Моя страничка</title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<p>Добро пожаловать</p>
</body>
</html>Сохраним эту страницу в папке www и перейдем к программированию счетчика.
counter.php
Чтобы сохранять полученные данные, нам необходимо их куда то записывать, пусть для начала это будет простой текстовый файл с именем stat.txt.
1
2
3<?php
$url = "counter/stat.txt";Переменной $url присвоен адрес до файла. Это является, единственный конфигурационный элемент, в котором мы задаем нужные данные, далее скрипт состоит из логических выражений else if и функций работы с файлами
Этот фрагмент кода отвечает за проверку на наличие файла, весь ход логических действий я
прописал в комментариях.1
2
3
4
5
6
7
8
9if(!file_exists($url)) { //Проверка на существование файла.
//Если файла не существует,
$count = 0;
$handle = fopen($url,"a");//создаем его,
fwrite($handle,$count);// и записываем нулевое значение
fclose($handle);//Закрываем файл
}Далее опишем условие, когда файл создан.
1
2
3
4
5
6
7
8
9
10
11
12
13else { //Если файл существует, то работаем с ним
$handle = fopen($url,"a+"); //Открываем его
$count = fread($handle,filesize($url)); //Читаем данные и присваеваем их переменной $count
fclose($handle); //Закрываем
$count++;//Добавляем одно посещение к полученному выше
$handle = fopen($url,"w"); // Открываем файл, и урезаем его до нулевой длины
fwrite($handle,$count); //Записываем переменную $count
fclose($handle); //Закрываем
}В этом фрагменте как раз описан скрипт счетчика посещений, внимательно смотрите, в первом фрагменте мы открываем файл для того чтобы его открыть и узнать количество посещений. Далее мы увеличиваем полученное значение на 1 единицу ( $count++;) и записываем это значение в наш файл.
В конце файла мы выводим статистику при помощи оператора echo
1
2
3echo "количество просмотров: $count ";
?>Мы рассмотрели самый простой тип счетчика, но поверьте, иногда сложнее и не требуется, например нам необходимо узнать количество прочтений страницы(статьи, объявления) внутри сайта. Обычно это указывает посетителям сайта наиболее интересный материал. Далее чтобы этот счетчик заработал, открываем наш файл index.php, и добавляем строчку до тэга </body>
1
2
3
4<?php @include(counter.php); ?>
</body>
</html>Результат обращения к странице (http://127.0.0.1/index.php) должен быть следующим:
[+] Плюсы
- Простота установки
- Не требует БД
[-] Минусы данного счетчика:
- Легко накручивается простым обновлением страницы (F5) .
- Если несколько человек одновременно обратятся к скрипту, возникнет ошибка.Т.к. файл открыт и используется кем то другим, поэтому необходимо дополнить скрипт.
- Если будет удален файл с данными, то вы потеряете накопленную статистику
Вариант 2
Счетчик учитывающий только посетителей. Что это значит? Посетители – это количество пользователей, которые посетили ваш ресурс, например за сутки, причем если даже человек будет обновлять страницу
значение посещений прибавляться не будет.Чтобы создать такой счетчик, нам необходимо научиться работать с сессиями. В чем смысл? Если человек посещает ваш сайт впервые, то создается сессия, которая работает до тех пор, пока человек не закрыл браузер, т.е. при последующих перезагрузках страницы (F5) либо переходах по сайту, мы будем проверять создана ли сессия. Если сессия существует, то учитывать пользователя не будем.
Данный вариант является немного усовершенствованным по сравнению с первым вариантом.
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13<?php session_start(); ?>
<html>
<head>
<title>Моя страничка</title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<p>Добро пожаловать</p>
<?php include("counter.php");?>
</body>
</html>Обратите внимание на начало файла, функция session_start() инициализирует сессию.
counter.php
В этом фрагменте по сравнению с первым оставляем все без изменений1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<?php
$url = "counter/stat.txt";
if(!file_exists($url)) {
//Если файла не существует, создаем его, и записываем нулевое значение
$count = 0;
$handle = fopen($url,"a");
fwrite($handle,$count);
fclose($handle);
}Здесь тоже, только читаем файл, и получаем количество посещений.Далее смотрите внимательней
1
2
3
4
5
6else {
//Если файл существует, то работаем с ним
$handle = fopen($url,"a+");//Открываем его
$count = fread($handle,filesize($url)); //Читаем данные и присваеваем их переменной $count
fclose($handle);Создаем условие, если сессия отсутствует , то это значит человек посещает страницу в первый раз, поэтому переменной $_SESSION['count'] присваиваем какое то значение, которое проверяется в начале условия, далее к переменной $count добавляем единицу, и записываем её обратно в файл, причем для начала запираем доступ к нему, производим запись и открываем доступ.Это нужно для того чтобы в момент обращения нескольких посетителей к скрипту не возникало ошибок.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24if (!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";
?>Теперь я обьясню, почему при нажатии F5 не добавляется посещение.Так как при первом посещении мы создаем сессию, то в результате проверки if(!isset($_SESSION['count']) выражение вернет значение FALSE, следовательно ничего прибавлять и записывать не будем.
[+] Плюсы
- Простота установки
- Не требует БД
- Не накручивается обновлением страницы
- При обращении скрипта нескольких человек одновременно, не возникает ошибки.
[-] Минусы данного счетчика:
- Если будет удален файл с данными, то вы потеряете накопленную статистику
Бонус
В этом варианте мы рассмотрим скрипт, который будет строить графическую картинку, на которой будет отображаться количество посетителей. Для этого нам нужна подложка для нашего счетчика, это должно быть изображение формата jpeg, для тестирования можете взять эту.
Далее нам необходимо доработать второй вариант, и добавить ещё один файл,
который будет отвечать за построение картинки.index.php
Оставляем без измененийcounter.php
Находим в конце строчку
1echo "количество просмотров: $count";и заменяем её на
1echo '<img src="img.php?s='.$count.'" border="0" alt="stat" width="100" height="40" />';img.php
Здесь находиться набор функций по работе с изображениями1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<?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);
?>Все эти три варианта обязательно пригодятся в будущем.
На странице должен появиться вот такой счетчик:
[+] Плюсы
- Простота установки
- Не требует БД
- Не накручивается обновлением страницы
- При обращении скрипта нескольких человек одновременно, не возникает ошибки.
- Красивый, настраиваемый внешний вид.
[-] Минусы данного счетчика:
- Если будет удален файл с данными stat.txt, то вы потеряете накопленную статистику
Исходники
Заключение
Я думаю все что я сегодня написал не так уж и сложно и написание счетчика на php не отнимет у вас много времени на изучение.
Все описанные варианты можно с легкостью применять на практике, для того чтобы вывести счетчик просто поместите код <?php @include(counter.php); ?> в нужное место, а если будут возникать какие то вопросы, можете оставлять их в камментах, обязательно обьясню и подскажу.92 Responses to “Урок 4. Статистика на сайте. Пишем скрипт счетчика посещений.”
Страниц: « 10 9 8 7 [6] 5 4 3 2 1 » Show All
Страниц: « 10 9 8 7 [6] 5 4 3 2 1 » Show All
Leave a Reply




Февраль 28th, 2009 at 18:40
в файле img.php выдает ошибку Undefined index: s
вот отсюда
imagestring($im,1,8,4,$_GET['s'],$black);
Февраль 28th, 2009 at 16:43
понятно, буду пробовать если сделаю выложу, для меня это очень итнересно.
Февраль 27th, 2009 at 12:54
У меня нет в уверенности что в этом проблема. Для этого необходимо провести так скажем диагностику. Создайте новый файл, пусть это будет test.php и внесите в него следующий код :
2
3
4
5
phpinfo();
?>
Сохраните. Далее обратитесь к этому файлу через браузер, наверно http://127.0.0.01/tets.php . На этой странице отобразиться страница с настройками php. Вам же необходимо поискать заголовок gd, ниже него будет в табличке информация о модуле. Все пункты должны быть в режиме enabled, а версия выше 2ой.
Вот и все.
Февраль 26th, 2009 at 15:05
Александр, подскажите как подключить эту библиотеку?
Февраль 26th, 2009 at 13:42
Да и на самом деле какая то лажа была в img.php
понять я так и не смог …писал о какой то
Parse error а потом перестал и вывел … хм …так что всем у кого не получается попробуйте тупо по обновлять страничку …
Февраль 25th, 2009 at 21:57
Возможно не подключена библиотека GD2 к PHP. Это можно посмотреть в файле конфигурации, или при помощи вызова функции phpinfo()
Февраль 25th, 2009 at 20:04
К сожалению с картинкой счетчик не работает, выдает ошибку «Fatal error: Call to undefined function ImageCreateFromJpeg() in C:\php\img.php on line 4 «
Февраль 24th, 2009 at 01:00
усе
странно, поменяла на пхп и заработало….
просто занимаюсь порезкой и для меня это было как-то странновато что файл с тегами штмл вдруг стал пхп ^_^
огромное спасибо
получилось все из этого урока
Февраль 23rd, 2009 at 23:17
Aska
переправь index.html на index.php и припудет с тобой счастье
Февраль 23rd, 2009 at 23:09
тот, что я привела как пример – index.html