PHP

Счетчик со статистикой

Этот скрипт считает не только число посещений сайта за сутки, но и число посещений каждый час. Ежедневная статистика сохраняется в отдельных файлах. Для работы счетчика нужно создать папку 'hit' в той же директории, где находится счетчик. Скрипт счетчика:

<?php
function clear_hit(){
$fh=fopen("hit/".date('d-m').".hit","w+");
for($i=0;$i<24;$i++){$dtrn=$dtrn."0|";}
fputs($fh,$dtrn);
fclose($fh);}

if(!file_exists("hit/".date('d-m').".hit"))clear_hit();
$h=intval(date('H'));
$data_f=@file_get_contents("hit/".date('d-m').".hit");
$data_h=explode("|",$data_f);
$df=fopen("hit/".date('d-m').".hit","w+");
$data_h[$h]++;
$data_day=implode("|",$data_h);
fputs($df,$data_day);
fclose($df);
echo $data_h[$h]."<BR>";
echo array_sum($data_h);
?>

Терепь - как это работает. Первое, что стоит в скрипте - функция clear_hit(), которая подготавливает суточный файл для записи:

function clear_hit(){
$fh=fopen("hit/".date('d-m').".hit","w+");
for($i=0;$i<24;$i++){$dtrn=$dtrn."0|";}
fputs($fh,$dtrn);
fclose($fh);}

Конструкция fopen уже встречалась, но особенность - в имени файла:

"hit/".date('d-m').".hit"

Первое: hit/ - имя директории, затем, после кавычек и точки - date('d-m') - функция, которая берет текущее время системы и возвращает его в виде 'день-месяц', например, если сегодня 17 января, функция выдаст 17-01. Это число и будет именем файла. Расширение файла будет .hit (можно и другое). Второе: имя файла составлено из частей, одни из которых являются строками (директория и расширение), другие (имя файла) - переменными. Строковые величины берутся в кавычки, все вместе объединается точками. Дальше - цикл, смысл которого: для счетчика цикла $i, начиная со значения ноль, пока $i меньше 24 (числа часов в сутках) и увеличивая $i на единицу за каждый проход цикла, выполняем действия в фигурных скобках. Эти действия: составляется строка $dtrn вида 0|0|0|...:

for($i=0;$i<24;$i++){$dtrn=$dtrn."0|";}

которая потом записывается знакомым способом в файл и файл закрывается:

fputs($fh,$dtrn);
fclose($fh);}

Функция clear_hit() вызывается по мере необходимости. Следующая строка - собственно начало скрипта.

if(!file_exists("hit/".date('d-m').".hit"))clear_hit();

Условие if(!file_exists(имя файла)) проверяет, есть ли файл с указанным именем, если файла нет, то создает его и вызывает функцию clear_hit(). Первое же срабатывание счетчика после полуночи приведет к созданию нового файла статистики с новой датой. В следующей строке извлекаем текущий час в 24-часовом формате функцией date('Н'):

$h=intval(date('H'));

Функция intval() - округление до целого. Считываем содержимое файла сегодняшней статистики:

$data_f=@file_get_contents("hit/".date('d-m').".hit");

Значок @ - блокировка сообщений об ошибках. Чтобы скрипт не матерился вслух, если файл не прочитается. Преобразуем строку, вычитанную из файла, в массив:

$data_h=explode("|",$data_f);

и открываем этот же файл, подготавливая его для записи:

$df=fopen("hit/".date('d-m').".hit","w+");

К числу посещений за текущий час прибавляем единицу:

$data_h[$h]++;

Объединяем массив в строку - функция implode() выполняет действие, обратное explode():

$data_day=implode("|",$data_h);

Записываем все обратно в файл статистики:

fputs($df,$data_day);

и закрываем его:

fclose($df);

Выводим показания счетчика за текущий час и за текущие сутки - просуммировав функцией array_sum() число посещений за каждый час:

echo $data_h[$h]."<BR>";
echo array_sum($data_h);

Сохраняем файл в папку 'www' под любым именем с расширением .php, создаем папку 'hit' в папке 'www', набираем адрес, не забыв запустить Денвер. Обновляем страницу, любуемся работой счетчика. Иногда просматриваем файл статистики - там число посещений по часам. И, как обычно - действующий пример. Теперь о том, как сосчитать посетителей.

Рейтинг@Mail.ru