-
Урок 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




Октябрь 6th, 2009 at 22:12
Например: Есть страница со списком некоротых роликов. Каждый пункт списка – ссылка на пхп документ (один и тот же для всего списка) который открывает ролик. Ссылка передает переменную (путь к файлу ролика) упомянутому пхп документу. Вопрос – как организовать счетчик для каждого ролика?
Сентябрь 28th, 2009 at 13:34
Счетчик по варианту №2 работает, но при обновлении страницы не появляется надпись «Повторите позднее», а остается запись с количеством просмотров. Пробовал и собственноручно написанный вариант counter.php, и скачанный из zip.
Август 20th, 2009 at 19:55
Долго не мог понять, почему у меня не отображается картинка с счетчиком. Оказывается мой PHP Expert Editor был прикручен к интерпретатору php, который я скачал перед первым уроком и настроен он не был, в частности не была настроена библиотека gd2. А настраивал я второй интерпретатор, который скачал, когда устанавливал Apache и MySQL…
Август 16th, 2009 at 13:10
У меня та же проблема, как и у vet
Июнь 3rd, 2009 at 13:07
Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at W:\home\test.ru\www\index.php:2) in W:\home\test.ru\www\index.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at W:\home\test.ru\www\index.php:2) in W:\home\test.ru\www\index.php on line 2
счетчик считает но почемуто по Ф5 все равно накручивает
Что означает эта ошибка появляется и потом пропадает при обновлении заново появляется и опять пропадает
Май 16th, 2009 at 19:19
Все понял) Тупанул чуток =)
Май 16th, 2009 at 19:18
if (!isset($_SESSION['count'])) { //Если сессия отсутствует
$_SESSION['count'] = 1; //Создаем её
$count++; //Добавляем единицу к переменной
В фрагменте непонятно зачем прибавлять еденицу к существующей. Всеравно проверка идет только на существование переменной. Помоему $count++; лишнее
Май 11th, 2009 at 02:33
А можете написать урок или скрипт, того как например для пользователей. Без базы данных, у каждого пользователя есть свой ID, так вот например создаёться тхт файл, в этом файле строка ID. И выводить количество просмотров по ид. И есчё опишите как создовать надписи в самом тхт файле. например регестрируеться пользователь на сайте, и в этом тхт файле его ID, и по этому ID выводить его количество.
Май 8th, 2009 at 22:41
Конечно можно, только надо все правильно прикрутить;)
Май 5th, 2009 at 01:31
Здраствуйте. А вот я хочу этот код использовать для счотчика, который показывает, сколько раз был просмотрен профиль пользователя, можно ли этими кодлами пользоваться? Или надо создовать базу данных специально для таких целей?