-
Урок 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); ?> в нужное место, а если будут возникать какие то вопросы, можете оставлять их в камментах, обязательно обьясню и подскажу.Что бы Ктулху не воскрес, подпишись на RSS!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, 2008 at 05:07
конечно можно! Кстати о фирме. Я тут счетчик писал, который показывает сводную статистику по сайтам.
наглядный пример
Заказали просто и строго. Самое интересное что в сети мы не смогли найти такого скрипта, который показывал сводной статистики.
А досадно.
Скриптик тот кстати будет развиваться, но только за счет заказчика. (Захочит заказчик статистику переходов с других сайтов(по URL), а может ему хиты подавай или еще че нить – он платит я пишу
)))
Декабрь 3rd, 2008 at 17:45
а можно сделать счетчик чтобы был размером 88х31 и показывал ещё и хиты и все в сумме?
Ноябрь 24th, 2008 at 17:28
Спасибо, действительно, опечатка.
Ноябрь 24th, 2008 at 16:00
У вас ошибка написания :
2
3
4
5
6
$handle = fopen($url,"a+");
$count = fread($nandle,filesize($url));
fclose($handle);
if (!isset($_SESSION['count'])) {
Смотрите у вас стоит $nandle, а не $handle
Ноябрь 23rd, 2008 at 20:06
Странно, но у меня не выводит количество посещений, если надо, то файл создается, а если уже создан то все содержимое удаляется, но ничего не вписывается. Проверьте поалуйста.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$url = "stat.txt";
if (!file_exists($url)) {
$count = 0;
$handle = fopen($url,"a");
fwrite($handle,$count);
fclose($handle);
} else {
$handle = fopen($url,"a+");
$count = fread($nandle,filesize($url));
fclose($handle);
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 раз";
?>
Выыодит так:
Ноябрь 21st, 2008 at 19:56
к предыдущему посту, php @include(«counter.php»);
заработал как php include «counter.php»;
Ноябрь 21st, 2008 at 05:00
А у меня почемуто при такой записи:
скрипт counter.php не подхватывался, заработал в таком виде:
, интересно в чем может быть причина ?
Ноябрь 16th, 2008 at 23:14
Google Analytics всем поможет;)
Ноябрь 16th, 2008 at 12:39
Чайники чайнками, а вот благодаря таким статьям и появляются спецм в своей облосте.
А это зря. Допустим есть фирма, которая хочет видеть сводную статисткику по своим сайтам, в виде таблице. Статистика должна быть скрытой от остальных глаз (конкуренты, так как есть вариант что системы (всеобщие) будут сливать инфу.)
Так что так!
Ноябрь 13th, 2008 at 16:37
Да ладно вам, это всего лишь описание алгоритма для чайников. В настоящее время нет смысла писать свои системы статистики, т.к. полно других очень функциональных.