Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Какой язык программирования вы используете ?

ASP
Delphi
C/C++
Basic
PHP
Pascal
Java
Другой


Результаты
Другие опросы

Всего голосов: 1968
Комментарии: 10


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Статьи и обзоры



Рейтинг страниц сайта

Речь пойдет о новой версии самого популярного в настоящее время языка написания сценариев для сервера - РНР 5. Этот язык позволяет разрабатывать высокопроизводительные Web-сайты любого масштаба и любой категории сложности. Рассматриваются такие вопросы, как синтаксические конструкции языка, объектно-ориентированное программирование на РНР, работа с базами данных и графическими изображениями, а также построение WAP-содержимого. Большое внимание уделяется эффективным решениям типовых практических задач на PHP, среди которых аутентификация посетителей, шифрование данных, использование сеансов, обработка ошибок, работа с электронной почтой. Эта статья является продолжением статьи о создании счетчика просмотров для каждой страницы сайта на php и MySQL (если Вы ее не читали, то обязательно прочтите, иначе ничего не поймете из ниже сказанного). В этой статья я решил продолжить тему и расширить возможности счетчика просмотров страниц.

Для увеличения возможностей и получения статистики просмотров страниц сайта к базовому 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
PHP - Код
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 - Код

 
$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($resultMYSQL_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($resultMYSQL_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
<table border="1" width="100%" align="center">
    <tr>
        <td rowspan="2" align="center" valign="middle">URL страницы</td>
        <td colspan="3" align="center" valign="middle" width="235">Просмотры страниц</td>
    </tr>
    <tr>
        <td height="35" align="center" valign="middle" width="125">дата доступа</td>
        <td height="35" align="center" valign="middle" width="55">сегодня</td>
        <td height="35" align="center" valign="middle" width="55">всего</td>
    </tr>
END;
foreach(
$data as $val)
{
    
$tmp MySQLRead_url($val['page_id']);
    
$url "<a href=&#092;"http://".$_SERVER['HTTP_HOST'].$tmp['page_url']."&#092;">http://".$_SERVER['HTTP_HOST'].$tmp['page_url']."</a>";
    
$date date("d.m.y H:i:s"$val['date']);
    
$today $val['today'];
    
$all $val['all'];
    echo <<<END
    <tr>
        <td valign="middle">
$url</td>
        <td align="center" valign="middle">
$date</td>
        <td align="center" valign="middle" width="55">
$today</td>
        <td align="center" valign="middle" width="55">
$all</td>
    </tr>
END;
}
echo 
"</table>";
}
 
$link mysql_connect($INFO['sql_host'], $INFO['sql_user'], $INFO['sql_pass']); // Соединение с MySQL
mysql_select_db ($INFO['sql_database']); // Выбор базы данных
 
/* Самые популярные страницы сегодня */
$data MySQLReadToday(); // получение данных из MySQL таблицы
echo "<h1>Самые популярные страницы в течении суток</h1>";
print_table($data); // печать таблицы с данными
 
/* Самые популярные страницы за все время */
$data MySQLReadAll(); // получение данных из MySQL таблицы
echo "<h1>Самые популярные за все время</h1>";
print_table($data); // печать таблицы с данными


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



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


.



Статьи и обзоры PHP Рейтинг страниц сайта Эта статья является продолжением статьи создании счетчика просмотров для каждой страницы сайта на MySQL если Вы ее не читали то обязательно прочтите иначе ничего поймете из ниже сказанного этой решил продолжить тему расширить возможности страниц Для увеличения возможностей получения статистики базовому скрипту необходимо добавить несколько строк своих функций частности нужно будет создать еще одну