Библиотека программиста

03.05.2024 - Счетчик просмотров для каждой страницы сайта на php

На некоторых сайтах часто можно увидеть следующую надпись внизу страницы или под статьями: "Всего просмотров xxx. Сегодня xx". На первый взгляд ничего особенного, но все равно, многим интересно, как это сделано.
В этой статье я попробую рассказать вам о том, как устроена данная статистика просмотров страниц сайта, на самом простом примере, написанном на php. Статистика просмотров страниц будет работать на связке MySQL + PHP. Основным отличием этой статистики от других будет то, что MySQL таблица будет занимать очень мало места, но при этом нельзя будет точно сказать какую именно страницу и сколько раз просмотрели. А все из-за того, что все url будут хешированны с помощью php функции md5(), что гарантирует почти 100% неповторяющихся id для каждой страницы сайта. Делается это только для ускорения работы php скрипта (при условии, что индексом является id страницы) и уменьшения размеров MySQL таблицы (за счет отсутствия длинных url).

MySQL таблица будет иметь следующую структуру:
Код
CREATE TABLE `my_log` (
`page_id` varchar(32) NOT NULL default '',
`all` int(11) NOT NULL default '0',
`today` int(11) NOT NULL default '0',
`date` int(11) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


page_id – уникальный id для каждой страницы сайта сгенерированный php функцией md5().
all – значение всех просмотров данной страницы.
today – просмотров страницы сегодня.
date – дата возвращаемая php функцией time() + 24 часа

Для правильного учета посещений страниц значение поля date будет изменяться, тогда, когда текущая дата будет больше той, что указанна в таблице. В этот же момент будет происходить и обнуление счетчика просмотров страницы за прошедшие сутки.

Почти весь php скрипт статистики просмотров для каждой страницы сайта состоит в основном из функций, которые выполняют строго определенную роль. Все функции снабжены комментариями, поэтому, надеюсь, все поймете сами.

PHP код скрипта статистики просмотров страниц сайта:
PHP - Код

 
/* данные для соединения с MySQL */
$INFO['sql_host'] = "localhost";
$INFO['sql_user'] = "username";
$INFO['sql_pass'] = "userpass";
$INFO['sql_database'] = "my_db";
 
/* проверка, есть ли запись в MySQL */
/* таблице с таким id или ее нет */
function searchID($id)
{
$result mysql_query ("SELECT * FROM `my_log` WHERE `page_id` LIKE '".$id."'");
$num_rows mysql_num_rows($result);
if (
$num_rows>0)
{
    return 
True;
}
else
{
    return 
False;
}
}
 
 
/* Читает запись из MySQL таблицы */
/* возвращает ассоциированный массив */
function MySQLRead($id)
{
$id addslashes($id);
$result mysql_query ("SELECT * FROM `my_log` WHERE `page_id` LIKE '".$id."'");
return (array)
mysql_fetch_assoc($result);
}
 
/* Обновление времени для конкретной записи */
function UpdateTime($id$time)
{
$id addslashes($id);
$time addslashes($time);
$result mysql_query ("UPDATE `my_log` SET `date` = '".$time."' WHERE `page_id` = '".$id."'");
return 
$result;
}
 
/* Обновление счетчиков для записи с указанным id */
function UpdateCounders($id$all$today)
{
$id addslashes($id);
$time addslashes($time);
$result mysql_query ("UPDATE `my_log` SET `all` = '".$all."',`today` = '".$today."' WHERE `page_id` = '".$id."'");
return 
$result;
}
 
/* Запись всех значений "По умолчанию" */
function Default_Write($id)
{
$id addslashes($id);
$result mysql_query ("INSERT INTO `my_log` ( `page_id` , `all` , `today` , `date` ) VALUES ('".$id."' , 1 , 1 , '".(time()+60<img src="images/smilies/60.gif" border="0"><img src="images/smilies/24.gif" border="0">)."');");
return 
$result;
}
 
$unical_page_id_gid md5($_SERVER['REQUEST_URI']); // получение md5() хэша из url страницы
 
$link mysql_connect($INFO['sql_host'], $INFO['sql_user'], $INFO['sql_pass']); // Соединение с MySQL
mysql_select_db ($INFO['sql_database']); // Выбор базы данных
 
if (!searchID($unical_page_id_gid)) // существует ли запись с таким id
{
    
Default_Write($unical_page_id_gid); // запись всех значений по умолчанию
}
else 
// если не существует
{
$tmp MySQLRead($unical_page_id_gid); // считаем значения
$all $tmp['all'] + 1;
$today $tmp['today'] +1;
if (
time()>=$tmp['date']) // если сутки с момента записи прошли
{
    
UpdateTime($unical_page_id_gid, (time()+60<img src="images/smilies/60.gif" border="0"><img src="images/smilies/24.gif" border="0">)); // обновим дату
    
UpdateCounders($unical_page_id_gid$all1); // обновим счетчики
}
else 
// если еще нет
{
    
/* обновим счетчики */
    
UpdateCounders($unical_page_id_gid$all$today);
}
/* устанавливаем константу с текущими значениями счетчиков */
define("Today_and_all_counter""Всего просмотров этой страницы: $all. Сегодня: $today");
}
 
mysql_close($link); // Разрываем соединение с MySQL


Вот в принципе и весь php скрипт статистики просмотров страниц сайта. Для того, что бы он работал, его нужно "подключить" к нужному вам скрипту, например к index.php, добавив в index.php строчку include(' counter.php ');. А в том месте, где должно выводиться сообщение о том, сколько человек просмотрело данную страницу – строчку echo Today_and_all_counter;.
Скачать данный php скрипт статистики просмотров страниц сайта и MySQL файл со структурой таблицы можно здесь
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=237