Счетчик со статистикой
Этот скрипт считает не только число посещений сайта за сутки, но и число посещений каждый час. Ежедневная статистика сохраняется в отдельных файлах. Для работы счетчика нужно создать папку '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', набираем адрес, не забыв запустить Денвер. Обновляем страницу, любуемся работой счетчика. Иногда просматриваем файл статистики - там число посещений по часам. И, как обычно - действующий пример. Теперь о том, как сосчитать посетителей.