|
|
|
| Уважаемай Игорь Вычеславович!. Несколько дней не заглядывал в систему учета посещаемости сайта. После вынужденного перерава открываю главную страницу счетчика и вижу слудующуу информацию:
Статистика посещений по страницам сайта
Ниже перечислены страницы, которые участвуют в статистике. По гиперссылкам можно получить детальную статистику по каждой отдельной странице
Для получения статистики только по выбранной странице щелкните на ее имени в таблице. Если страница не будет выбрана, то статистика будет представлена для всего сайта.
Произошла исключительная ситуация (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(0, 0, 0, date("m"), date("d")-1, date("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(0, 0, 0, date("m"), date("d")-1, date("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*(7 - $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*(7 - $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 += (7 - $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(0, 0, 0, date("m"), date("d")-1, date("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()");
}
}
}
}
?>
|
В чем может быть ошибка? Не связано ли это с переводом на зимнее время? | |
|
|
|
|
|
|
|
для: sevidi
(29.10.2009 в 13:52)
| | Нужен дамп базы данных, чтобы воспроизвести ситуацию. | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|