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

Форум PHP

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

 

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

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

тема: данные в таблицах PowerCounter 4
 
 автор: sergio433   (28.01.2010 в 22:57)   письмо автору
 
 

Прошу помощи по cчетчику PowerCounter 4

Данные в таблицах
powercounter_ip
powercounter_searchquerys
powercounter_refferer
хранятся только за 2 дня, а мне нужно чтобы хранились за 30 дней.
Каким образ происходит очистка и где поменять значения чтобы данные
хранились за 30 дней?

Нашел код в файле archive.php суточной архивации


///////////////////////////////////////////////////
// Удаляем старые записи
///////////////////////////////////////////////////
$query = "SELECT MAX(putdate) FROM $tbl_arch_hits";
$arh = mysql_query($query);
if(!$arh) exit("Сбой при удалении старых записей");
if(mysql_num_rows($arh) > 0)
{
$last_date_arch = mysql_result($arh,0);
$arr[] = "DELETE FROM $tbl_ip WHERE putdate <= '$last_date_arch'";
$arr[] = "DELETE FROM $tbl_refferer WHERE putdate <= '$last_date_arch'";
$arr[] = "DELETE FROM $tbl_searchquerys WHERE putdate <= '$last_date_arch'";
foreach($arr as $query)
{
if(!mysql_query($query))
{
throw new ExceptionMySQL(mysql_error(),
$query,
"Ошибка выполнения запроса");
}


Что нужно поменять чтобы данные из таблиц не удалялись за последние 30 дней ??

  Ответить  
 
 автор: Rolex   (29.01.2010 в 01:44)   письмо автору
 
   для: sergio433   (28.01.2010 в 22:57)
 

Здравствуйте! Самый простой способ решения проблемы - закомментировать код, поставив символы /* и */ :


///////////////////////////////////////////////////
// Удаляем старые записи
///////////////////////////////////////////////////
/*
$query = "SELECT MAX(putdate) FROM $tbl_arch_hits";
$arh = mysql_query($query);
if(!$arh) exit("Сбой при удалении старых записей");
if(mysql_num_rows($arh) > 0)
{
$last_date_arch = mysql_result($arh,0);
$arr[] = "DELETE FROM $tbl_ip WHERE putdate <= '$last_date_arch'";
$arr[] = "DELETE FROM $tbl_refferer WHERE putdate <= '$last_date_arch'";
$arr[] = "DELETE FROM $tbl_searchquerys WHERE putdate <= '$last_date_arch'";
foreach($arr as $query)
{
if(!mysql_query($query))
{
throw new ExceptionMySQL(mysql_error(), 
$query,
"Ошибка выполнения запроса");
}
*/

  Ответить  
 
 автор: sim5   (29.01.2010 в 02:16)   письмо автору
 
   для: Rolex   (29.01.2010 в 01:44)
 

Да. И особенно, если этот метод прописать везде между <?php и ?> во всех скриптах - в этом случае вообще никаких проблем не наблюдается!

  Ответить  
 
 автор: Тень   (29.01.2010 в 03:33)
 
   для: sim5   (29.01.2010 в 02:16)
 

Я воспользовался Вашим советом и получил Parse error :((((( Что делать?

  Ответить  
 
 автор: sim5   (29.01.2010 в 07:41)   письмо автору
 
   для: Тень   (29.01.2010 в 03:33)
 

Почитать мануал внимательно - при правильном применении этого метода, все должно быть девственно чистым ;-)

  Ответить  
 
 автор: Тень   (29.01.2010 в 08:20)
 
   для: sim5   (29.01.2010 в 07:41)
 

Я призываю Вас чётко давать советы новичкам!

  Ответить  
 
 автор: sim5   (29.01.2010 в 09:35)   письмо автору
 
   для: Тень   (29.01.2010 в 08:20)
 

Ах да, виноват. Надо полагать, что вы опустили четвертый аргумент функции, потому и проблема.

  Ответить  
 
 автор: Тень   (29.01.2010 в 09:40)
 
   для: sim5   (29.01.2010 в 09:35)
 

Как всегда пришлось искать решение самому! Сделал патч:.

В htaccess добавил
php_value "auto_prepend_file" "/path/patch.php"


Файл patch.php
[code]<?php
exit;
?>[code]

Всё OK!

  Ответить  
 
 автор: Тень   (29.01.2010 в 09:41)
 
   для: Тень   (29.01.2010 в 09:40)
 

Ах, вот они, вот они эти минусы анонимного пользования.

  Ответить  
 
 автор: sim5   (29.01.2010 в 09:43)   письмо автору
 
   для: Тень   (29.01.2010 в 09:40)
 

Так я же говорю, мануал нужно читать и рекомендации. Что же вы батенька не все файлы обработали, как говорилось выше?

  Ответить  
 
 автор: Тень   (29.01.2010 в 10:02)
 
   для: sim5   (29.01.2010 в 09:43)
 

Почему это не все?

  Ответить  
 
 автор: sergio433   (30.01.2010 в 13:46)   письмо автору
 
   для: Rolex   (29.01.2010 в 01:44)
 

Проблему решил . Вот код может кому то пригодиться .
Кстати счетичк при таком решении начал работать правильно и показывать результаты за 7 и 30 дней


  ///////////////////////////////////////////////////
      // Архивируем информацию в ежедневные таблицы
      ///////////////////////////////////////////////////
      archive_client          ($tbl_ip, $tbl_arch_clients);
      archive_hit_hosts       ($tbl_ip, $tbl_arch_hits);
      archive_robots          ($tbl_ip, $tbl_arch_robots);
      archive_num_searchquery ($tbl_searchquerys, $tbl_arch_num_searchquery);
      archive_searchquery     ($tbl_searchquerys, $tbl_arch_searchquery);
      archive_refferer        ($tbl_refferer, $tbl_arch_refferer);
      archive_ip              ($tbl_ip, $tbl_arch_ip);
      archive_enterpoints     ($tbl_ip, $tbl_pages, $tbl_arch_enterpoint);
      archive_time            ($tbl_ip, $tbl_arch_time, $tbl_arch_time_temp);
      archive_deep            ($tbl_ip, $tbl_arch_deep);
  
      ///////////////////////////////////////////////////
      // Удаляем старые записи
      ///////////////////////////////////////////////////
      $query = "SELECT MAX(putdate) FROM $tbl_arch_hits";
      $arh = mysql_query($query);
      if(!$arh) exit("Сбой при удалении старых записей");
      if(mysql_num_rows($arh) > 0)
      {
        $last_date_arch = mysql_result($arh,0);


// Выводим дату на 30 дней назад и записуем ее в переменную

// забирает текущее время в массив
$timestamp = time();
$date_time_array = getdate($timestamp);
$hours = $date_time_array['hours'];
$minutes = $date_time_array['minutes'];
$seconds = $date_time_array['seconds'];
$month = $date_time_array['mon'];
$day = $date_time_array['mday'];
$year = $date_time_array['year'];
// используйте mktime для обновления UNIX времени
// Вычтем 30 дней из $day
$timestamp = mktime($hours,$minutes,$seconds,$month,$day-30,$year);
$tday = strftime('%Y-%m-%d',$timestamp);
//////////////////////////////////////////////////

// здесь  переменную из исходного кода разработчиков $last_date_arch меняем на свою $tday которая удалает из таблиц записи старее 30 дней
 
        $arr[] = "DELETE FROM $tbl_ip WHERE putdate <= '$tday'";
        $arr[] = "DELETE FROM $tbl_refferer WHERE putdate <= '$tday'";
       $arr[] = "DELETE FROM $tbl_searchquerys WHERE putdate <= '$tday'";
        foreach($arr as $query)


  Ответить  
 
 автор: sim5   (29.01.2010 в 09:49)   письмо автору
 
   для: sergio433   (28.01.2010 в 22:57)
 

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

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

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