Простой счётчик посещений на PHP: никаких баз данных

Полезные скрипты
Ответить
Аватара пользователя
mihas
Администратор
Сообщения: 1371
Зарегистрирован: 18 авг 2004, 16:58
Откуда: Москва
Контактная информация:

Простой счётчик посещений на PHP: никаких баз данных

Сообщение mihas »

Счетчик записывает параметры в обычный текстовый файл не используя баз данных. Поместите у себя на сервере пустой текстовый файл, назовите его, например, counter.txt. Файл должен быть разрешен на запись: выставите для него в FTP-клиенте атрибуты CHMOD 777.
В нужном документе поместите следующий код на PHP:

Код: Выделить всё

<?php
//counter
$COUNT_FILE = "counter.txt"; 
$message="";
$ip = getenv("REMOTE_ADDR")."::".getenv("HTTP_X_FORWARDED_FOR"); 
$datum=date("d.m.Y", time()-3*3600); 
$fp = fopen("$COUNT_FILE", "rb"); 
flock($fp,1); 
$contents=fread ($fp, filesize ($COUNT_FILE)); 
fclose ($fp); 
$content= explode("\n",$contents); 
$counts= explode("|",$content[0]); 
$counts[3]=chop($counts[3]); 
if ($counts[3]=="") {$counts[3]="1";} 
if (!in_array ($ip, $content)) { $content[] = $ip; $counts[1]++; } 
$counts[2]++; 
$counts[3]++; 
// полночь. ;) 
if ($counts[0]!=$datum) { 
$message="total hits:    ".$counts[3]."\ntoday hits:    ".$counts[2]."\ntoday uniques: ".$counts[1];
$r11=$counts[1];
$r21=$counts[2];
$counts[0]=$datum; $counts[1]=1; $counts[2]=1; 
} 
echo ("<div align=\"center\"><span class=\"counter\">Всего посещений - ".$counts[3]." | Всего за день - ".$counts[2]." | Уникальных за день - ".$counts[1]."</span></div>"); 
$content[0]=$counts[0]."|".$counts[1]."|".$counts[2]."|".$counts[3]; 
$fd = fopen("$COUNT_FILE", "a"); 
$locked = flock($fd,2); 
if ($locked) { 
$fp = fopen("$COUNT_FILE", "wb"); 
if ($message=="") { fwrite($fp, implode("\n",$content)); }
else  { fwrite($fp,$content[0]);  }
fclose($fp); 
} 
fclose($fd);
//end counter
?>
Если вы хотите другое оформление - замените в коде название стиля counter на что хотите. В строке echo просто показан необходимый синтаксис. Обращаю внимание, что файл с кодом должен иметь расширение .php и ваш хостинг-провайдер должен предоставлять вам услугу PHP. В целом это может быть целиком и полностью от начала до конца обычный html-файл: главное правильное расширение и приведенный кусок кода начинающийся с "<?php" и заканчивающийся "?>".

Счетчик обнуляет посещения и уникальные ip-адреса за день каждую полночь.

Теперь бонус: как разместить подобный счетчик на форуме phpBB2 внизу каждой страницы. Не сложно.
Ищем файл includes/page_tail.php, в нем находим строки:

Код: Выделить всё

//
// Show the overall footer.
//
и после них вписываем весь приведенный выше скрипт без первой и последней строки разумеется. В скрипте удаляем или ремим // строку echo (и далее все в скобках).
Далее в том же файле includes/page_tail.php находим строку

Код: Выделить всё

'ADMIN_LINK' => $admin_link)
и перед ней вписываем еще несколько элементов массива:

Код: Выделить всё

'COUNTER3' => $counts[3],
'COUNTER2' => $counts[2],
'COUNTER1' => $counts[1],
Открываем файл overall_footer.tpl и в нем там где вам нравится, например после строки

Код: Выделить всё

2001, 2005 phpBB Group
вписываем:

Код: Выделить всё

<br />Всего посещений - {COUNTER3} | Всего за день - {COUNTER2} | Уникальных за день - {COUNTER1}
Аватара пользователя
mihas
Администратор
Сообщения: 1371
Зарегистрирован: 18 авг 2004, 16:58
Откуда: Москва
Контактная информация:

Простой счётчик посещений для phpbb3: никаких баз данных

Сообщение mihas »

Для форума phpbb3 будет актуально проделать тоже самое для размещения счетчика с другим файлом - functions.php. Найдите в нем строки:
  • /**
    * Generate page footer
    */
    function page_footer($run_cron = true)
    {
и впишите код скрипта из первого поста. Затем найдите пониже массив
  • $template->assign_vars(array(
и в любое место массива впишите как там через запятую

Код: Выделить всё

		//счетчик
		'COUNTER3' => $counts[3],
		'COUNTER2' => $counts[2],
		'COUNTER1' => $counts[1],
		//счетчик
Далее в файле overall_footer.html впишите в то место, которое вам нравится, например внутри блока <span class="copyright"> строчку:

Код: Выделить всё

Всего посещений - {COUNTER3} | Всего за день - {COUNTER2} | Уникальных за день - {COUNTER1}
Вобщем для phpBB3 почти все то же самое, что и для phpBB2, только файл нужного скрипта называется не page_tail.php а functions.php.
Ответить

Вернуться в «PHP»