Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PowerCounter - Система подсчета Хостов и Хитов (Сегодня Вчера За 7 дней За 30 дней За всё время)
 
 автор: TrEK   (04.02.2011 в 17:49)   письмо автору
74.4 Кб
 
 

Хотел уточнить один момент.
http://i16.fastpic.ru/big/2011/0204/aa/48c229aedc4f969e5ea30a6d81bcd6aa.jpg
Система подсчета хостов "За 7 дней" устроена так, что суммирует все ежедневные хосты...
Я считаю это чуть неверным, так как если каждый день на сайт заходило 50 уникальных юзеров, то получается что "За 7 дней" - должно показать тоже 50. А система подсчитывает , что 7*50=350

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

Прошу объяснить мне этот момент или подсказать , если снова таки есть решение или настройка.

  Ответить  
 
 автор: cheops   (04.02.2011 в 18:00)   письмо автору
 
   для: TrEK   (04.02.2011 в 17:49)
 

На самом деле не совсем справедливо... уникальных хостов будет между 50 и 350 (хосты не каждый день одни и те же). Но чтобы вычислять это количество точно, нужно хранить информацию о хитах и хостах за каждый день. От этой системы пришлось отказаться, так как для больших сайтов это просто не реально - за день может накапливаться по 100 Мб информации - её нужно сжимать в ущерб точности.

В свое время было несколько дискуссий, посвященных этому вопросу. Было решено по умолчанию хранить подробную информацию только за пару дней. Кому надо расширяют этот интервал искусственно, путем редактирования запросов в archive.php. Однако, это не приводит автоматически к точному подсчету. Это нужно глубоко модифицировать счетчик именно под режим малого посещения (если посещений много - это бесполезно - счетчик просто рухнет под обилием неархивированной информации).

PS Если это критически важно, я могу помочь советом и кодом для редактирования. Однако, вряд ли эти изменения войдут в дистрибутив в самое ближайшее время.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 19:22)   письмо автору
 
   для: cheops   (04.02.2011 в 18:00)
 

>уникальных хостов будет между 50 и 350 (хосты не каждый день одни и те же).
Ну в моем случае 50 и тех же уникальных хостов каждый день


Просто может создать еще дополнительное поле , в которую будет вноситься каждая новая уникальная айпишка. ?
И соответсвенно с нее брать данные для вывода на сайт.

Так как мне по сути много чего не нужно из статистики, для меня основное , уник.айпи за день, за неделю, за месяц, за всё время....

а все остальное уже как бы не столь важно.

  Ответить  
 
 автор: cheops   (04.02.2011 в 19:35)   письмо автору
 
   для: TrEK   (04.02.2011 в 19:22)
 

Хм... может и не плохая мысль... только если нужно будет количество посещений с этих адресов, а тем более распределенных по времени (т.е. вычислять посещения за определенный интервал) все-равно придется хранить огромные массивы данных.

Если важен сам IP-адрес и количество посещений с него (без привязки к датам) можно создать таблицу (лучше отдельную таблицу, а не дополнительное поле) с полем ip, которое проиндексировать как уникальное поле, в count.php вставить код, который обновляет счетчик для этого поля на единицу, если количество обновленных полей равно 1 - все нормально значение уже есть в таблице и оно увеличено на единицу. Если же количество обновленных полей равно 0 - это новое значение IP-адреса, его нужно вставить при помощи оператора INSERT.

Но это не позволит следить за уникальными IP-адресами за день, месяц и неделю - так как у нас не будет информации, когда IP-адреса появлялись. Можно, конечно извернуться с полем даты и времени... Давайте я попробую подготовить такой патч, у нас есть softtime.org со средней посещаемостью, на нём можно будет идеально оттестировать такой подход.

Только IP-адреса будут все подряд, т.е. незасчитанные, вычислить засчитанные мы тут не сможем.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 21:50)   письмо автору
 
   для: cheops   (04.02.2011 в 19:35)
 

А что вообще означают засчитанные адресса?...
Я так себе думал, что если юзер обратился к странице сайта, его айпи уже и есть зачисленный.

Спасибо за модификацию попробую.
Да , Вы правильно изъяснили, мне не надо учёт посещений для тех айпишек которые хочу суммарно увидеть.

Тоесть можно оставить всё как есть в Вашей системе, но в еще одной таблице вести учет сугубо уникальных айпишек, ну и сколько хостов ими было сделано, и когда последний заход на сайт.
НУ а потом сделать статистику за день, за неделю, за месяц , !за год! всех уникальных адресов.

  Ответить  
 
 автор: cheops   (04.02.2011 в 21:55)   письмо автору
 
   для: TrEK   (04.02.2011 в 21:50)
 

>А что вообще означают засчитанные адресса?...
>Я так себе думал, что если юзер обратился к странице сайта, его айпи уже и есть зачисленный.
Это IP-адреса без роботов (т.е. люди, условно, конечно, так как некоторые спам-роботы маскируются под людей, в общем IP-адреса за минусом честных роботов).

>Тоесть можно оставить всё как есть в Вашей системе, но в еще одной таблице вести учет сугубо уникальных айпишек, ну и сколько хостов ими было сделано, и когда последний заход на сайт.
>НУ а потом сделать статистику за день, за неделю, за месяц , !за год! всех уникальных адресов.
Да.

  Ответить  
 
 автор: cheops   (04.02.2011 в 20:10)   письмо автору
9.3 Кб
 
   для: TrEK   (04.02.2011 в 19:22)
 

Ввести новую подсистему для учета IP-адресов на небольших страницах можно следующим образом. В первую очередь нам потребуется SQL-таблица для аккумулирования хостов
CREATE TABLE powercounter_ip_unique (
  id_position int(11) NOT NULL auto_increment,
  ip bigint(20) NOT NULL,
  total bigint(20) NOT NULL,
  putdate datetime NOT NULL,
  PRIMARY KEY  (id_position)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;

В файл count.php необходимо добавить её название (в районе 20 строки)
<?php
  $tbl_ip_unique 
'powercounter_ip_unique';
?>

а также механизм заполнения, в районе 50 строки
<?php
  
// Формируем таблицу уникальных IP-адресов
  
$query "UPDATE $tbl_ip_unique
            SET total = total + 1, putdate = NOW()
            WHERE ip = INET_ATON('
$ip')";
  
$unp mysql_query($query);
  if(
$unp)
  {
    if(!
mysql_affected_rows())
    {
      
// Обновление не сработало - вставляем новое значение
      
$query "INSERT INTO $tbl_ip_unique
                VALUES (NULL, INET_ATON('
$ip'), 1, NOW())";
      
mysql_query($query);
    }
  }
?>

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

Далее в dmn/config.php добавляем название новой таблицы (в районе 26 строки)
<?php
  $tbl_ip_unique                 
'powercounter_ip_unique';
?>

А файл dmn/hits.php заменяем на тот, что во вложении. Ждем обновлений и смотрим на результаты. На основании новой таблицы можно будет потом переделать отчеты для страниц IP-адресов.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 21:52)   письмо автору
 
   для: cheops   (04.02.2011 в 20:10)
 

Дело в том, что у меня сайт открыт только для внутренней сети, соответственно Роботы Гуггла учитываться не должны... или будут?

Спасибо за помощь, щас попробую сделать предложенные Вами изменения.

  Ответить  
 
 автор: cheops   (04.02.2011 в 21:56)   письмо автору
 
   для: TrEK   (04.02.2011 в 21:52)
 

Если они не ходят, то учет вестись не будет - впрочем вы всегда это сможете выяснить на странице Поисковые роботы - если там нули, значит роботы не ходят.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 22:03)   письмо автору
 
   для: cheops   (04.02.2011 в 20:10)
 

Простите, но я не могу понять, куда надо вставить :

"механизм заполнения, в районе 50 строки".
Можете хотя бы стазать после какой функции.. или после какой строки. Просто я опасаюсь чо прерву выпонение какй-нибудь функции, и система перестанет работать корректно

  Ответить  
 
 автор: cheops   (04.02.2011 в 22:07)   письмо автору
 
   для: TrEK   (04.02.2011 в 22:03)
 

Вставьте после этих строк
<?php
  
// Если название не указано - формируем URL
  
if(empty($titlepage)) 
  {
    
$titlepage "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
  }
?>

PS Названия таблиц в config.php вообще все-равно куда вставлять - хоть в начало, хоть - в конец.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 22:18)   письмо автору
 
   для: cheops   (04.02.2011 в 22:07)
 

Я вставил сюда:

$titlepage = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
//$titlepage = "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; // TrEK
}
// Экранируем спец-символы
$titlepage = mysql_escape_string($titlepage);
// Проверяем нет ли такой страницы в базе данных
$query = "SELECT id_page FROM $tbl_pages
WHERE title = '$titlepage'";
$pgs = mysql_query($query);


// TrEK Формируем таблицу уникальных IP-адресов
$query = "UPDATE $tbl_ip_unique
SET total = total + 1, putdate = NOW()
WHERE ip = INET_ATON('$ip')";
$unp = mysql_query($query);
if($unp)
{
if(!mysql_affected_rows())
{
// Обновление не сработало - вставляем новое значение
$query = "INSERT INTO $tbl_ip_unique
VALUES (NULL, INET_ATON('$ip'), 1, NOW())";
mysql_query($query);
}
}



if ($pgs)
{
// Выясним, первичный ключ (id_page)
// текущей страницы (по названию страницы)
if(mysql_num_rows($pgs)>0) $id_page = mysql_result($pgs,0);




Вроде бы работает... таблица по чуть-чуть заполняется хостами и их хитами...
п.с. Время там заполняется самого первого захода.. или как?

  Ответить  
 
 автор: cheops   (04.02.2011 в 22:38)   письмо автору
 
   для: TrEK   (04.02.2011 в 22:18)
 

Время будет обновляться постоянно - за счет этого мы сможем корректно отрезать интервалы - 1 сутки, 7 суток, месяц, год, все время, так как все интервалы будут включать этот интервал. А вот для посуточного или понедельного отчета эта таблица не будет подходить.

PS Место своеобразное, но на работоспособности никак не отразится.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 22:41)   письмо автору
 
   для: cheops   (04.02.2011 в 22:38)
 

Ах да , вижу, что время обновляется....

Я так понимаю после замены hits.php в админке будут отображатся уже только уникальные адреса?

  Ответить  
 
 автор: cheops   (04.02.2011 в 22:45)   письмо автору
 
   для: TrEK   (04.02.2011 в 22:41)
 

Там будет сейчас по новой схеме работать вторая строка будет (Хосты), все остальное пока будет работать по старой схеме.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 22:46)   письмо автору
 
   для: cheops   (04.02.2011 в 22:45)
 

Понял...

  Ответить  
 
 автор: TrEK   (04.02.2011 в 22:44)   письмо автору
 
   для: cheops   (04.02.2011 в 22:38)
 

Чуть не понял... Как именно "для посуточного или понедельного отчета эта таблица не будет подходить.", тоесть на что это повлияет?

  Ответить  
 
 автор: TrEK   (04.02.2011 в 22:45)   письмо автору
 
   для: TrEK   (04.02.2011 в 22:44)
 

Все понял

В hits.php будет отображать, а в hits.daily.php, hits.weekly.php, hits.monthly.php будут какие-то затруднения?

  Ответить  
 
 автор: cheops   (04.02.2011 в 22:52)   письмо автору
 
   для: TrEK   (04.02.2011 в 22:45)
 

А там не надо (пусть старая информация тоже будет - её удобно использовать например, для вывода посещений за прошедшие сутки - если это вдруг потребуется на сайте). Когда информации накопится лучше переработаем подсистему address.php - так как с такой таблицей можно будет отображать IP-адреса за все время работы счетчика без ограничений.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 22:53)   письмо автору
 
   для: cheops   (04.02.2011 в 22:52)
 

Да, "за прошедшие сутки" тоже нужно... вот оттуда и буду брать инфу, для вывода статистики такого плана

Про address.php верно подметили... будем ждать , пока инфа соберется...

Список всех адресов , которые посетили сайт тоже нужен... так как такого списка в существующей системе пока нету.

  Ответить  
 
 автор: cheops   (04.02.2011 в 23:12)   письмо автору
 
   для: TrEK   (04.02.2011 в 22:53)
 

>Список всех адресов , которые посетили сайт тоже нужен... так как такого списка в существующей
>системе пока нету.
Хм... он на главной странице системы администрирования должен быть.

  Ответить  
 
 автор: cheops   (17.02.2011 в 12:55)   письмо автору
5.5 Кб
 
   для: TrEK   (04.02.2011 в 22:53)
 

>Про address.php верно подметили... будем ждать , пока инфа соберется...
Файл address.php необходимо заменить на тот, что во вложении.

  Ответить  
 
 автор: cheops   (04.02.2011 в 22:46)   письмо автору
 
   для: TrEK   (04.02.2011 в 22:44)
 

Будет неприятный момент - точная статистика не будет совпадать с приблизительной (в остальной части системы).

  Ответить  
 
 автор: TrEK   (04.02.2011 в 22:49)   письмо автору
 
   для: cheops   (04.02.2011 в 22:46)
 

Ну это не столь страшно... я буду видеть общую статистику посещений, время, странички, хиты....

Но в то же время буду иметь точную инфу о айпи-адресах.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 22:52)   письмо автору
 
   для: TrEK   (04.02.2011 в 22:49)
 

в общем, чтоб я уже усвоил изенения:

точные значения заносятся только в раздел "Хосты и Хиты" строку "Хосты" (по всем интервалам времени)

Раздел "Посуточный отчёт" , "Понедельный отчёт"," Помесячный отчёт" будет по прежнему обновлятся приблизительной информацией...

Все верно истолковано?

  Ответить  
 
 автор: cheops   (04.02.2011 в 22:54)   письмо автору
 
   для: TrEK   (04.02.2011 в 22:52)
 

Да, совершенно верно.

  Ответить  
 
 автор: TrEK   (04.02.2011 в 23:05)   письмо автору
 
   для: cheops   (04.02.2011 в 22:54)
 

Подскажите еще, почему в разделе "Системы и браузеры"(clients.php) не отображаются Операционные системы за "Вчера" "За 7 дней" "За 30 дней" "За всё время" ?...

Было бы хорошо еще и здесь поправку внести... чтоб было точное значение Браузером и ОС для временных отрезков.... здесь много работы будет?




П.С. Может сразу добавить поля для ОС и Браузеров в новой таблице ? И вести кроме приблизительного ихнего учета (в старой системе) еще и точную статистику?

  Ответить  
 
 автор: cheops   (04.02.2011 в 23:12)   письмо автору
 
   для: TrEK   (04.02.2011 в 23:05)
 

>Было бы хорошо еще и здесь поправку внести... чтоб было точное значение Браузером и ОС для
>временных отрезков.... здесь много работы будет?
Завтра посмотрю в чем там дело может быть

>П.С. Может сразу добавить поля для ОС и Браузеров в новой таблице ? И вести кроме
>приблизительного ихнего учета еще и точную статистику?
Это уже не корректно будет - сегодня человек из под IE зашел, завтра из под Opera и эти хиты/хосты нужно считать отдельно. А отдельно - это уже очень большие объемы и очень низкая скорость обработки, от которой мы перед этим годами уходили. Можно увеличить время хранения данных с пары суток до месяца и брать данные от туда (если у вас не очень высокая посещаемость).

  Ответить  
 
 автор: TrEK   (04.02.2011 в 23:23)   письмо автору
 
   для: cheops   (04.02.2011 в 23:12)
 

Ок, ну хотя бы чтобы ОС отображались в отрезках времени для "Системы и браузеры".

А на счет того что человек из под разных браузером может заходить каждый раз... я не подумал.
Просто я вначале подумал, что для каждого поля уникального айпи добавить еще 4-5 полей основных браузеров... (МФ, ИЕ, ОПЕРА, ХРОМ и ДРУГОЙ)... ну и если из-под уже учтенной айпишки заходит человек с ХРОМА, и проходит проверку на наличие данных в поле браузеров для того адреса, и если ,скажем , там уже было указано "1" в поле браузера ОПЕРА, а в поле "хром" пусто, значит изменяем его значение на "1", и при последующем посещении сайта с того же адреса то ли из Хрома, то ли из Оперы - изменения в поля ОПЕРА-ХРОМ вносится не будут... соответственно уже имеем учет, что человек пользовался как Оперой так и Хромом. В итоге выводится точная статистика:

Общее число использующих Оперу: n+1
Общее число использующих Хром: n+1

Где n - уже имеющиеся значение.
Получается таким образом один человек увеличил общее юзабельных число сразу двух браузеров.

Правильно или не очень?
Такой алгоритм тоже ужарит по скорости обработки статистики?

  Ответить  
 
 автор: cheops   (05.02.2011 в 13:34)   письмо автору
 
   для: TrEK   (04.02.2011 в 23:23)
 

Да, все верно.

PS В ранних версиях счетчика была единая таблица ip, которая хранила данные и для IP-адреса и для USER_AGENT (браузер и операционная система), кроме того под каждое посещение и её обработка была достаточно тягомотным делом. Потом общими усилиями данные стали разбиваться на компоненты и отдельные таблицы сразу при учете посещения. Однако, под каждое посещение по прежнему отводилась отводилась отдельная строка. Потом данные стали сжиматься за сутки, недели и месяцы, чтобы ускорить формирование отчетов (это, конечно, привело к потери точности, но этим приходится жертвовать в таких системах).

  Ответить  
 
 автор: cheops   (05.02.2011 в 20:02)   письмо автору
9.8 Кб
 
   для: cheops   (04.02.2011 в 20:10)
 

Обнаружил ошибку в файле hits.php для формирования недельного и месячного отчетов, нужно заменить на новый файл hist.php (во вложении).

  Ответить  
 
 автор: TrEK   (06.02.2011 в 00:47)   письмо автору
 
   для: cheops   (05.02.2011 в 20:02)
 

Спасибо, заменил.

  Ответить  
 
 автор: TrEK   (17.02.2011 в 20:38)   письмо автору
 
   для: TrEK   (06.02.2011 в 00:47)
 

Продолжение здесь...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования