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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Power Counter. Выгрузка данных

Сообщения:  [1-10]    [11-20]  [21-21] 

 
 автор: cheops   (15.09.2005 в 13:08)   письмо автору
 
   для: Loki   (15.09.2005 в 10:08)
 

Да со страницами проблема имеется... ну не будем показывать данные за всё время - в конце концов, оптимизация скорости и места требуют жертв :)))

>Для внешнего счетчика, вероятно, тупо приравнивать засчитанные хосты ко всем
>хостам... или вообще их не показывать. В любом случае, я не очень представляю
>как работает внешний счетчик.
А у него и нет незасчитанных хостов - внешний счётчик это картинка - её грузят с сервера-счётчика и пока он её формирует и отсылает клиенту от учытывает кто к нему обратился. Роботы картинки не грузят (клиенты-то не все грузят :), поэтому у внешних счётчиков только хосты (и то не полностью). Грубо говоря PowerCounter даёт 1500 чистых хостов и 1650 грязных, а тот же Rambler даст 1100, т.е. подсчёт идёт для тех, кто грузит картинки.

   
 
 автор: Loki   (15.09.2005 в 10:08)   письмо автору
 
   для: cheops   (15.09.2005 в 02:58)
 

Да. Я тоже уже с этим сталкивался.
Со скелетом функции согласен: именно так я и собирался это сделать. Но есть трудность: если запрашиваются данные по конкретной странице, но надо бы их брать из ip, так как arch_ip не делает различий и все валит в кучу. Данные будут только за последний месяц, но это больше чем ничего.
Надо ли все это выделять в отдельную функцию - не знаю, так как вызываться она будет только из одного места.

По п.1: это я перестраховался. Побоялся что вдруг где-нить при вычислениях вылезет лишняя секунда -заархивируем дополнительный день:)

3. Я и не знал что так можно - здорово! надо будет еще где-нибудь использовать:)

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

   
 
 автор: cheops   (15.09.2005 в 02:58)   письмо автору
 
   для: cheops   (15.09.2005 в 02:55)
 

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

   
 
 автор: cheops   (15.09.2005 в 02:55)   письмо автору
 
   для: Loki   (14.09.2005 в 23:13)
 

Я пока побоялся портить основной PowerCounter на сайте и колдую над внешним счётчиком.
1) Мне не понравился момент
<?php
  
if (intval(($last_day $last_date)/24/60/60))
  {
    
$days ceil(($last_day-$last_date)/24/60/60);
?>

у меня чего-то криво работает, заменил на
<?php
  
if (ceil(($last_day $last_date)/24/60/60))
  {
    
$days ceil(($last_day-$last_date)/24/60/60);
?>


2) Переименовал поле date в putdate, так как могут быть проблемы, особенно с phpMyAdmin, да и в других таблицах putdate используется.

3) Решил изменить добавление в таблицу arch_hits, преобразовав несколько одиночных INSERT-запросов в один многострочный, т.е. в цикле помещаю в массив данные
<?php
      $sql
[] = "(0, '".date("Y-m-d H:i:s",$last_day)."' - INTERVAL ".($i-1)." DAY, $hosts$hists$totalhists$_GET[id_user])";
?>

а потом формирую запрос при помощи implode
<?php
    $query 
"INSERT INTO $tbl_arch_hits VALUES".implode(","$sql);
?>


4) Вычисление $date['data'] решил продублировать в коде, а не пологаться на topcounter.php, так как со временем код будет использоваться для автоматической работы - он должен быть автономным.

А так вообще всё работает как часы - всё вставляется, удаляется - классная штука. Нужно будет только с функциями представления поработать. Скелет функции show_ip_host решил сделать следующим
<?php
function show_ip_host($begin$end$id_user$tbl_ip$tbl_arch_hits)
{
  
// Обнуляем хиты и хосты
  
$hosts     0;
  
$hits      0;
  
$totalhist 0;
  
// Определяем принадлежность сата
  
$user " AND id_user=$id_user";

  
/////////////////////////////////////////////////////////////////////////////
  // Исходим из таблицы соответствия
  //            begin end
  // сегодня      1    0  - это извлекаем из $tbl_ip
  // вчера        2    1  - это извлекаем из $tbl_arch_hits
  // неделя       7    0  - это извлекаем из $tbl_arch_hits
  // месяц       30    0  - это извлекаем из $tbl_arch_hits
  // всё время    0    0  - это извлекаем из $tbl_arch_hits
  /////////////////////////////////////////////////////////////////////////////

  // Если учёт происходит вплоть до сегодняшнего дня - учитываем это, обращаясь
  // к текущим хитам и хостам в таблице $tbl_ip
  
if($end == 0)
  {
    ... 
    
// Если запросы выполнениы удачно,
    // получаем результат
    
$hosts     += mysql_result($hst0);
    
$hits      += mysql_result($pht0);
    
$totalhist += mysql_result($tot0);
  }

  
// Если требуемый интервал затрагивает дни, упакованные в таблицы
  // плюс ко всему извлекаем информацию из архивной таблицы $tbl_arch_hits
  
if($begin != 1)
  {
    ...
    
// Если запросы выполнениы удачно,
    // получаем результат
    
$hosts     += mysql_result($hst0);
    
$hits      += mysql_result($pht0);
    
$totalhist += mysql_result($tot0);
  }

  
// Возвращаем результат
  
return array($hosts$hits$totalhist);
}
?>

К сожалению, это всё пока не совместимо с PowerCounter, так как у внешнего счётчика отсутствует понятие "засчитанные хосты" и присутсвует понятия нескольких сайтов, но после того как механизмы будут отлажены - перенос уже не будет представлять труда.

   
 
 автор: Loki   (14.09.2005 в 23:13)   письмо автору
 
   для: cheops   (14.09.2005 в 19:35)
 

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

   
 
 автор: cheops   (14.09.2005 в 19:35)   письмо автору
 
   для: Loki   (14.09.2005 в 13:28)
 

Да имеется несколько сайта, просто при работе с HTML-сайтом может быть более удобный вариант внешнего счётчика, также удобнее работать с ним если есть необходимость поддержки сразу нескольких сайтов.

   
 
 автор: Loki   (14.09.2005 в 13:28)   письмо автору
 
   для: cheops   (14.09.2005 в 12:53)
 

можно сделать такую проверку:

<?
if ($last_date<=$date['date']) $last_date=$date['date'];
?>


А по поводу нескольких сайтов что имеется ввиду?
Я обращал внимание что заложена возможность мониторинга нескольких сайтов (правда, она не реальизована и мне не очень ясна польза от нее:). Речь об этом?

   
 
 автор: cheops   (14.09.2005 в 12:53)   письмо автору
 
   для: Loki   (14.09.2005 в 09:25)
 

Да сегодня продолжу разбирать... просто я ещё на несколько сайтов пытаюсь обощить - скорее всего из-за этого глюки лезут :) Наверное нужно будет ввести защиту от 1970 года :), а то после такого сбоя нашими скриптами никто пользоваться не будет :)))

   
 
 автор: Loki   (14.09.2005 в 09:25)   письмо автору
 
   для: cheops   (14.09.2005 в 03:03)
 

$last_day - это последний завершенный день
$last_date - последняя дата выгрузки.
Если небыло ни одной выгрузки, то sql запрос вместо даты возвращает NULL (во всяком случае у меня). В этом случае, в качестве $last_date мы берем $date - то есть дату запуска счетчика.

Проверьте, возвращает ли запрос

SELECT UNIX_TIMESTAMP(MAX('date')) as 'date' FROM arch_hits

NULL в случае отсутствия архивных записей. Если этого не происходит, то скрипт будет пытаться делать выгрузки до 1970 года:) В этом случае, придется придумывать другое условие:)

   
 
 автор: cheops   (14.09.2005 в 03:03)   письмо автору
 
   для: cheops   (14.09.2005 в 01:47)
 

Так $date нашёл в topcounter.php :), а чем $last_day отличается от $last_date - у меня почему то получается дикая разница и скрипт норовит пару десятков тысяч записей вставить :)))

   

Сообщения:  [1-10]    [11-20]  [21-21] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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