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

Форум PHP

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

 

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

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

тема: Еще раз о PowerCounter

Сообщения:  [1-3] 

 
 автор: inmurov   (02.11.2009 в 13:53)   письмо автору
 
   для: cheops   (02.11.2009 в 11:40)
 

Здравствуйте !

Абсолютно такая же проблема как у / sevidi / тема / Еще раз о PowerCounter /, правильно автор написал про зимнее время, кажется причина именно в этом, powercounter - на двух сайтах, сайты на разных хостингах сидят и абсолютно в одно и тоже время начали выдавать вышеприведенную ошибку:

Произошла исключительная ситуация (ExceptionMySQL) при обращении к СУБД MySQL.
Duplicate entry '2009-10-22' for key 2
INSERT INTO powercounter_arch_clients VALUES (NULL,
'2009-10-22',...........................................................

.............................Ошибка в файле /pub/home/dogada11/htdocs/dmn/system_powercounter/utils.client.php в строке 68.

  Ответить  
 
 автор: cheops   (02.11.2009 в 11:40)   письмо автору
 
   для: sevidi   (29.10.2009 в 13:52)
 

Нужен дамп базы данных, чтобы воспроизвести ситуацию.

  Ответить  
 
 автор: sevidi   (29.10.2009 в 13:52)   письмо автору
 
 

Уважаемай Игорь Вычеславович!. Несколько дней не заглядывал в систему учета посещаемости сайта. После вынужденного перерава открываю главную страницу счетчика и вижу слудующуу информацию:

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

Произошла исключительная ситуация (ExceptionMySQL) при обращении к СУБД MySQL.

Duplicate entry '2009-10-17' for key 2
INSERT INTO powercounter_arch_clients VALUES (NULL,
'2009-10-17',
14,
7,
0,
2,
0,
4,
4,
0,
0,
0,
4),(NULL,
'2009-10-18',
10,
4,
0,
7,
0,
4,
4,
0,
0,
0,
4),(NULL,
'2009-10-19',
14,
4,
0,
12,
0,
4,
6,
0,
0,
0,
6),(NULL,
'2009-10-20',
10,
8,
0,
7,
0,
7,
3,
0,
0,
0,
3),(NULL,
'2009-10-21',
11,
7,
0,
8,
0,
9,
5,
0,
0,
0,
5),(NULL,
'2009-10-22',
11,
6,
0,
10,
0,
4,
4,
0,
0,
0,
4),(NULL,
'2009-10-23',
9,
7,
0,
4,
0,
5,
5,
0,
0,
0,
5),(NULL,
'2009-10-24',
4,
7,
0,
3,
0,
6,
6,
0,
0,
0,
6),(NULL,
'2009-10-25',
5,
5,
0,
5,
0,
4,
5,
0,
0,
0,
5),(NULL,
'2009-10-26',
5,
6,
0,
7,
0,
8,
5,
0,
0,
0,
5),(NULL,
'2009-10-27',
6,
4,
0,
8,
0,
4,
6,
0,
0,
0,
6),(NULL,
'2009-10-28',
13,
3,
0,
9,
0,
3,
5,
0,
0,
0,
5)

Ошибка в файле /storage/home/srv18790/htdocs/dmn/system_powercounter/utils.client.php в строке 63.


Сначала подумал, что произошел какой-то сбой на удаленном сервере. После этого проверил страницу на локальном сервер, там тоже самое.
Вот файл utils.client.php
<?php
  
  
// Система учёта посещаемости сайта - PowerCounter   
  // Выставляем уровень обработки ошибок 
 
  
Error_Reporting(E_ALL & ~E_NOTICE); 

  
// Функция архивации клиентов в суточные таблицы
  
function archive_client($tbl_ip$tbl_arch_clients)
  {
    
// Последний полный день
    
$last_day mktime(000date("m"), date("d")-1date("Y"));
    
// Начало архивации данных
    
$begin_day begin_day_arch($tbl_ip$tbl_arch_clients);
    
// Количество дней, подлежащих архивации
    
$days ceil(($last_day $begin_day)/24/60/60);
    
// Блок архивации
    
if($days)
    {
      for (
$i $days 1$i >= 0$i--)
      {
        
$begin "SELECT COUNT(DISTINCT ip) 
                  FROM 
$tbl_ip 
                  WHERE systems NOT LIKE 'robot_%' AND 
                        putdate LIKE '"
.date("Y-m-d"$last_day $i*24*3600)."%' AND 
                        browsers = "
;
        
// Подсчитываем количество обращений за сутки 
        
$browsers_msie     query_result("$begin 'msie'");
        
$browsers_opera    query_result("$begin 'opera'");
        
$browsers_netscape query_result("$begin 'netscape'");
        
$browsers_firefox  query_result("$begin 'firefox'");
        
$browsers_myie     query_result("$begin 'myie'");
        
$browsers_mozilla  query_result("$begin 'mozilla'");
        
$browsers_none     query_result("$begin 'none'");
  
        
$systems_windows   query_result("$begin 'windows'");
        
$systems_unix      query_result("$begin 'unix'");
        
$systems_macintosh query_result("$begin 'macintosh'");
        
$systems_none      query_result("$begin 'none'");
  
        
// Формируем запрос для архивной таблицы
        
$sql_clients[] = "(NULL,
                          '"
.date("Y-m-d"$last_day $i*24*3600)."',
                          
$browsers_msie,
                          
$browsers_opera,
                          
$browsers_netscape,
                          
$browsers_firefox,
                          
$browsers_myie,
                          
$browsers_mozilla,
                          
$browsers_none,
                          
$systems_windows,
                          
$systems_unix,
                          
$systems_macintosh,
                          
$systems_none)";
      }
      if(!empty(
$sql_clients))
      {
        
$query "INSERT INTO $tbl_arch_clients VALUES ".implode(","$sql_clients);
        if(!
mysql_query($query))
        {
           throw new 
ExceptionMySQL(mysql_error(), 
                                    
$query,
                                   
"Ошибка суточной архивации - archive_client()");
        }
      }
    }
  }
  
  
  
// Функция архивации браузеров и операционных систем в недельные таблицы
  
function archive_client_week($tbl_arch_clients$tbl_arch_clients_week)
  {
    
// Последний полный день
    
$last_day mktime(000date("m"), date("d")-1date("Y"));
    
// Начало архивации данных
    
$begin_day begin_day_arch($tbl_arch_clients$tbl_arch_clients_week'putdate_begin');
    
// Вычисляем сколько недель прошло с даты последней архивации
    
$week floor(($last_day $begin_day)/24/60/60/7);
    
// Если прошло больше недели - архивируем данные
    
if ($week 0)
    {
      
// $begin_day - дата последней архивации... - смотрим далеко ли до
      // конца недели (воскресенье). Интервал включает данные с Понедельника (1)
      // до воскресенья (0).
      
$weekday date('w'$begin_day);
  
      
// Текущему времени приравниваем начальную точку
      
$current_date $begin_day;
      while(
floor(($last_day $current_date)/24/60/60/7))
      {
        
$end "FROM $tbl_arch_clients
                WHERE putdate > '"
.date("Y-m-d"$current_date)."' AND
                      putdate <= '"
.date("Y-m-d"$current_date 24*3600*($weekday))."'";

        
// Подсчитываем количество обращений за неделю
        
$browsers_msie     query_result("SELECT SUM(browsers_msie) $end");
        
$browsers_opera    query_result("SELECT SUM(browsers_opera) $end");
        
$browsers_netscape query_result("SELECT SUM(browsers_netscape) $end");
        
$browsers_firefox  query_result("SELECT SUM(browsers_firefox) $end");
        
$browsers_myie     query_result("SELECT SUM(browsers_myie) $end");
        
$browsers_mozilla  query_result("SELECT SUM(browsers_mozilla) $end");
        
$browsers_none     query_result("SELECT SUM(browsers_none) $end");
        
$systems_windows   query_result("SELECT SUM(systems_windows) $end");
        
$systems_unix      query_result("SELECT SUM(systems_unix) $end");
        
$systems_macintosh query_result("SELECT SUM(systems_macintosh) $end");
        
$systems_none      query_result("SELECT SUM(systems_none) $end");

        
// Формируем запрос для архивной таблицы
        
$sql_clients[] = "(NULL,
                          '"
.date("Y-m-d"$current_date)."',
                          '"
.date("Y-m-d"$current_date 24*3600*($weekday))."', 
                          
$browsers_msie,
                          
$browsers_opera,
                          
$browsers_netscape,
                          
$browsers_firefox,
                          
$browsers_myie,
                          
$browsers_mozilla,
                          
$browsers_none,
                          
$systems_windows,
                          
$systems_unix,
                          
$systems_macintosh,
                          
$systems_none)";
        
// Увеличиваем текущее время до следующей недели
        
$current_date += ($weekday)*24*3600;
        
$weekday 0// Далее идут циклы по целой недели
      
}
      if(!empty(
$sql_clients))
      {
        
$query "INSERT INTO $tbl_arch_clients_week VALUES".implode(","$sql_clients);
        if(!
mysql_query($query))
        {
           throw new 
ExceptionMySQL(mysql_error(), 
                                    
$query,
                                   
"Ошибка недельной архивации - archive_client_week()");
        }
      }
    }
  }
  
  
// Функция архивации браузеров и операционных систем в месячные таблицы
  
function archive_clients_month($tbl_arch_clients$tbl_arch_clients_month)
  {
    
// Последний полный день
    
$last_day mktime(000date("m"), date("d")-1date("Y")) + 2;
    
// Начало архивации данных
    
$begin_day begin_day_arch($tbl_arch_clients$tbl_arch_clients_month);
    
// Вычисляем сколько недель прошло с даты последней архивации
    
$month = (floor(date("Y",$last_day) - date("Y",$begin_day)))*12 
             
floor(date("m",$last_day) - date("m",$begin_day)); 
    
// Если прошло больше месяца - архивируем данные
    
if ($month 0)
    {
      
// Архивируем данные по всем месяцам, по которым архивация
      // не проводилась
      
for($i date("Y",$begin_day)*12 date("m",$begin_day); $i date("Y",$last_day)*12 date("m",$last_day); $i++)
      {
        
$year = (int)($i/12);
        
$month = ($i%12);
        if(
$month == 0)
        {
          
$year--;
          
$month 12;
        }

        
$end "FROM $tbl_arch_clients
                WHERE YEAR(putdate) = 
$year AND
                      MONTH(putdate) = '"
.sprintf("%02d",$month)."'";
  
        
// Подсчитываем количество обращений за месяц
        
$browsers_msie     query_result("SELECT SUM(browsers_msie) $end");
        
$browsers_opera    query_result("SELECT SUM(browsers_opera) $end");
        
$browsers_netscape query_result("SELECT SUM(browsers_netscape) $end");
        
$browsers_firefox  query_result("SELECT SUM(browsers_firefox) $end");
        
$browsers_myie     query_result("SELECT SUM(browsers_myie) $end");
        
$browsers_mozilla  query_result("SELECT SUM(browsers_mozilla) $end");
        
$browsers_none     query_result("SELECT SUM(browsers_none) $end");
        
$systems_windows   query_result("SELECT SUM(systems_windows) $end");
        
$systems_unix      query_result("SELECT SUM(systems_unix) $end");
        
$systems_macintosh query_result("SELECT SUM(systems_macintosh) $end");
        
$systems_none      query_result("SELECT SUM(systems_none) $end");

        
// Формируем запрос для архивной таблицы
        
$sql_clients[] = "(NULL,
                         '
$year-".sprintf("%02d",$month)."-01',
                          
$browsers_msie,
                          
$browsers_opera,
                          
$browsers_netscape,
                          
$browsers_firefox,
                          
$browsers_myie,
                          
$browsers_mozilla,
                          
$browsers_none,
                          
$systems_windows,
                          
$systems_unix,
                          
$systems_macintosh,
                          
$systems_none)";
      }
  
      if(!empty(
$sql_clients))
      {
        
$query "INSERT INTO $tbl_arch_clients_month VALUES".implode(","$sql_clients);
        if(!
mysql_query($query))
        {
           throw new 
ExceptionMySQL(mysql_error(), 
                                    
$query,
                                   
"Ошибка месячной архивации - archive_clients_month()");
        }
      }
    }
  }
?>

В чем может быть ошибка? Не связано ли это с переводом на зимнее время?

  Ответить  

Сообщения:  [1-3] 

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

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