Рецепты программирования на PHP

  Главная   Учебник   Статьи   FAQ   Книги   Ссылки  

Пишем простейший текстовой счётчик

Итак, писать мы будет простейший текстовой счётчик. Для начала решим для себя, как именно он будет работать. Всего наш скрипт будет состоять из четырёх файлов :
-Файл
для хранения ip пользователей (ip.txt)
-Файл
для хранения данных счётчика (counter.txt)
-Сам
файл скрипта (counter.php)
-Шаблон
вывода счётчика (template.html)

Алгоритм работы очень прост:
-Когда
скрипт запускается, он получает ip запустившего его браузера.
-По
ip проверяем, были ли уже запросы от этого браузера или нет.
-Если
не были — добавляем ip в базу и прибавляем по единичке ко всем счётчикам.
-Если
уже были — прибавляем по одному поинту к хитам.
-Выводим
данные счётчика.

Отображать наш счётчик будет:
-Просмотров
всего
-Просмотров
сегодня
-Уникальных
посетителей сегодня

Как видите, в теории всё очень просто. На практике не намного сложнее. Создаём все четыре файла. Текстовые файлы не трогаем — в них будет хозяйничать наш скрипт. Шаблон вывода оставим на потом. Открываем counter.php и приступаем.

# Начало файла counter.php
counter.php
<?php
$ip=getenv("REMOTE_ADDR");
#Получаем ip запустившего скрипт компьютера
$date=date('d.m.Y',time());
#Присваиваем переменной $date текущую дату

#Следующий блок считывает файл с ip адресами
$fo = fopen ("ip.txt", 'r');
#Открываем файл
flock($fo,1);
#"Запираем" файл для чтения. Если кто-то ещё захочет прочитать этот файл - его запрос "встанет в очередь"
$data = fread ($fo, filesize("ip.txt"));
#Считываем информацию из файла и присваиваем её переменной $data
flock($fo,3);
# Разблокируем файл
fclose ($fo);
#Закрываем файл

#Нижеследующий блок повторяет ту же самую процедуру с файлом counter.txt
$f = fopen ("counter.txt", 'r''r');
flock($f,1);
$counts = fread ($f, filesize("counter.txt"));
flock($f,3);
fclose ($f);

list($d,$total,$hits,$hosts)=explode("|",$counts);
# Проходимся по данным счётчика и присваиваем их соответствующим переменным. Алгоритм работы простой - идём до разделителя( "|" ), присваиваем значение первой переменной из list, идём до следующего разделителя и так далее.


#Проверяем, соответствует ли дата в файле счётчика текущей дате. Если нет - обнуляем файл с ip файлами и некоторые значения счётчика.
if ($d!=$date)
{
$d=$date;
#Обновляем дату
$hits=0;
#Просмотров сегодня теперь равны нулю
$hosts=0;
#То же самое с уникальными посетителями
$erase=fopen("ip.txt",'w+');
#Открываем файл с ключём "w+" - это значит, что данные файла обнуляются и на их место мы записываем новые данные
flock($erase,2);
#Запираем файл для записи
fputs($erase,"");
#Записываем в файл "всемирное ничто"
flock($erase,3);
fclose($erase);
}


#Теперь проверяем, есть ли ip у нас в базе.
if (!stristr($data,$ip))
# Если нет
{
$file=fopen("ip.txt",'a');
flock($file,2);
fputs($file,$ip."rn");
#Записываем новый ip в базу
flock($file,3);
fclose($file);
$total++;
$hits++;
$hosts++;
#Прибавляем к значениям счётчика по единице
}
else
#Если ip уже есть в базе, прибавляем по единице только хитам
{
$total++;
$hits++;
}

#Записываем новые данные счётчика в файл
$wfile=fopen("counter.txt",'w+');
flock($wfile,2);
fputs($wfile,$d."|".$total."|".$hits."|".$hosts);
#Записываем данные с разделителем ("|"), для удобной сортировки, которую мы проводили выше
flock($wfile,3);
fclosвыше
flock($wfile,3);
fclose($wfile);

#Всё, теперь можно выдавать пользователю показатели счётчика
include ("template.html");
?>


Шаблон вывода данных счётчика делается очень просто. Файл template.html выглядит так:

<?php echo <<<HTML

[ <b>$total</b> :: $hits :: $hosts ]
#Это и есть сам шаблон вывода.

HTML;
?>


#Конец файла counter.php

Вот и всё, мы написали простой счётчик.
Можно сделать небольшое усовершенствование скрипта. К примеру, если вы не хотите, что бы кто-нибудь мог посмотреть ip адреса людей, посетивших сегодня вашу страницу. Для этого надо поместить текстовые файлы в отдельныю папку, в этой же папке создать файл .htaccess и написать в нём всего одну строчку:
deny from all

Не забудьте поставить разрешение на запись в текстовые файлы и в папку, а так же поменяйте путь к этим файлам в скрипте.
Что бы вывести счётчик на страницу, в нужном месте пометите следующий код :
<?php include(«путь_к_папке_скрипта/counter.php») ?>

На этом разрешите откланяться. Желаю удачи и успехов в постижении нелёгкого дела программиста.

Hosted by uCoz