Счетчик просмотров для каждой страницы сайта. Рейтинг страниц сайта
Для увеличения возможностей и получения статистики просмотров страниц сайта к базовому php скрипту необходимо добавить несколько строк и своих функций. В частности нужно будет создать еще одну таблицу, которая имеет следующую структуру:
CREATE TABLE `my_log_urls` (
  `page_id` varchar(32) NOT NULL default '',
  `page_url` text NOT NULL,
  KEY `page_id` (`page_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
 
    Как видно из структуры MySQL таблицы, она состоит всего из двух полей (page_id – хэш сумма md5() от  urla страницы и page_url – url страницы) и индекса, установленного на поле page_id – для значительного ускорения поиска значения в таблице. И еще, я не стал изменять изначальную таблицу my_log, которая использовалась для подсчета количества просмотров страниц, а создал другую по одной простой, но очень весомой причине: чем больше данных в таблице – тем медленнее осуществляется поиск по таблице. А скорость работы php скриптов такого уровня не должна ощутимо влиять на работу сайта в целом. Ведь если у вас коммерческий и при этом очень посещаемый сайт, то тратить строго ограниченное процессорное время на второстепенные задачи просто невыгодно, ведь зачастую прибыль зависит от того, сколько человек сможет увидеть ваш сайт.

    Теперь перейдем непосредственно к коду php скрипта. Я внес в него незначительные изменения, в основном это новые функции для работы с MySQL таблицей my_log_urls.

В counter.php внес следующие изменения:
добавляем функцию Default_Write_URL
function Default_Write_URL($id, $url)
{
$id = addslashes($id);
$result = mysql_query ("INSERT INTO `my_log_urls` ( `page_id` , `page_url` ) VALUES ('".$id."' , '".$url."');");
return $result;
} В коде, заменяем
if (!searchID($unical_page_id_gid)) // существует ли запись с таким id
{
    Default_Write($unical_page_id_gid); // запись всех значений по умолчанию
} на
if (!searchID($unical_page_id_gid)) // существует ли запись с таким id
{
    Default_Write($unical_page_id_gid); // запись всех значений по умолчанию
    Default_Write_URL($unical_page_id_gid, $_SERVER['REQUEST_URI']);
}
    В результате, получаем значительную экономию времени т.к. делаем всего одну запись в таблицу my_log_urls и одну в my_log, и при следующих запросах этой же страницы запрос к таблице my_log_urls выполняться не будет, т.к. запись уже существует в таблице my_log, следовательно и в таблице my_log_urls она то же есть.
    Для подсчета рейтинга страниц сайта, предлагаю написать другой php скрипт, который будет по значениям просмотров страницы в таблице my_log брать значения в таблице my_log_urls. А результат представлять в виде таблицы с данными о просмотрах страниц, отсортированными по убыванию (от большего значения к меньшему).
    Ниже приведен код php скрипта, который необходимо скопировать в созданный вами файл top.php:
php
/* http://wm-help.net/ */
 
$INFO['sql_host'] = "localhost";
$INFO['sql_user'] = "username";
$INFO['sql_pass'] = "userpass";
$INFO['sql_database'] = "my_db";
 
/* Top 10 сегодня */
function MySQLReadToday()
{
$result = mysql_query ("SELECT * FROM `my_log` ORDER BY `today` DESC LIMIT 0 , 10 ") or print ("Query failed");
$new_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    if (time()<$row['date']) // если сутки еще не прошли
    {
        $new_arr[] = $row;
    }
}
return $new_arr;
}
 
/* Top 10 за все время работы счетчика */
function MySQLReadAll()
{
$result = mysql_query ("SELECT * FROM `my_log` ORDER BY `all` DESC LIMIT 0 , 10 ") or print ("Query failed");
$new_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    $new_arr[] = $row;
}
return $new_arr;
}
 
/* по хэш-сумме получить url страницы */
function MySQLRead_url($id)
{
$id = addslashes($id);
$result = mysql_query ("SELECT * FROM `my_log_urls` WHERE `page_id` LIKE '".$id."'");
return (array)mysql_fetch_assoc($result);
}
 
/* печать таблицы с данными */
function print_table($data)
{
echo <<

   
       
       
   
   
       
       
       
   
END;
foreach($data as $val)
{
    $tmp = MySQLRead_url($val['page_id']);
    $url = ".$_SERVER['HTTP_HOST'].$tmp['page_url']."">http://".$_SERVER['HTTP_HOST'].$tmp['page_url']."";
    $date = date("d.m.y H:i:s", $val['date']);
    $today = $val['today'];
    $all = $val['all'];
    echo <<
   
       
       
       
       
   
END;
}
echo "
URL страницыПросмотры страниц
дата доступасегоднявсего
$url$date$today$all
"
;
}
 
$link = mysql_connect($INFO['sql_host'], $INFO['sql_user'], $INFO['sql_pass']); // Соединение с MySQL
mysql_select_db ($INFO['sql_database']); // Выбор базы данных
 
/* Самые популярные страницы сегодня */
$data = MySQLReadToday(); // получение данных из MySQL таблицы
echo "

Самые популярные страницы в течении суток

"
;
print_table($data); // печать таблицы с данными
 
/* Самые популярные страницы за все время */
$data = MySQLReadAll(); // получение данных из MySQL таблицы
echo "

Самые популярные за все время

"
;
print_table($data); // печать таблицы с данными
?>

    Данный php скрипт выводит 10 самых популярных страниц вашего сайта за последние сутки и за все время. В принципе, можно осуществлять вывод и большего числа страниц, изменив в php функциях MySQLReadAll и MySQLReadToday лимит считываемых из таблицы записей. А так же можно вместо самых популярных страниц увидеть самые непопулярные, изменив способ сортировки в этих же функциях с DESC на ASC.

Источник: http://www.srubil.ru
Категория: PHP & MySQL | Добавил: kotenok1343 (06.03.2010)
Просмотров: 457 | Теги: PHP | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]