Сайт сообщества | Клуб пользователей | О проекте

Имя
Пароль
ПравилаРегистрацияСправка
Сообщения за деньПоиск

Вернуться   Клуб пользователей портальной системы RUNCMS > Портал > Настройка и эксплуатация

Ответ
 
Опции темы Опции просмотра
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #1 06-07-2009, 14:38

1) Ошибка в методе fetch_rowset() класса Database

Метод fetch_rowset() класса Database, используется в адаптации phpBB2 от SVL, однако в этом методе не работает кеширование результата запроса к BD.

Исправление:

в файле /class/database/mysql.php

функцию fetch_rowset() это 460-484 строки в RUNCMS 1.6.2
PHP код:
   function fetch_rowset($resource 0)
   {
      if(
$resource === 'cache' && $this->cached)
      {
         return 
$this->cache;
      }
      while(
$this->rowset[$resource] = @mysql_fetch_array($resource))
      {
         if(
$this->caching)
         {
            if(
$this->row[$resource] === false)
            {
               
$this->write_cache();
            }
            
$this->cache[] = $this->row[$resource];
         }
         
$result[] = $this->rowset[$resource];
      }
      if(
$this->caching)
      {
         
$this->write_cache();
      }

      return 
$result;
   } 
меняем на

PHP код:
   function fetch_rowset($resource 0)
   {
      if(
$resource === 'cache' && $this->cached)
      {
         return 
$this->cache;
      }
      while(
$this->rowset[$resource] = @mysql_fetch_array($resource))
      {
         if(
$this->caching)
         {
            if(
$this->rowset[$resource] === false)
            {
               
$this->write_cache();
            }
            
$this->cache[] = $this->rowset[$resource];
         }
         
$result[] = $this->rowset[$resource];
      }
      if(
$this->caching)
      {
         
$this->write_cache();
      }

      return 
$result;
   } 

Последний раз редактировалось LARK, 06-07-2009 в 23:27


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
ZlydenGL вне форума ZlydenGL
Напильникъ - наше все

Аватар для ZlydenGL

| Цитировать Старый #2 06-07-2009, 14:42

Т.е. вся правка сводится к замене вызова this->row на this->rowset?


Не ошибается только тот, кто ничего не делает. Ковчег построил любитель. Профессионалы строили Титаник.
  Сообщения: 777 c 22.09.2008 | Репутация: 92
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #3 06-07-2009, 14:52

Цитата:
Сообщение от ZlydenGL Посмотреть сообщение
Т.е. вся правка сводится к замене вызова this->row на this->rowset?
Да. Данный метод практически не используется, но тем кто будет оптимизировать phpBB2 и вводить кеширование запросов перед fetch_rowset(), придется делать или этот фикс или переписывать fetch_rowset на while с fetch_array/fetch_assoc


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #4 06-07-2009, 17:18

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

Т.е.

PHP код:
while ( $row $db->fetch_array($result) ) {} 
запрос будет кеширован, а

PHP код:
if ( $row $db->fetch_array($result) ) {} 
не будет.

Это не совсем баг, просто недоработка механизма кеширования

Последний раз редактировалось LARK, 06-07-2009 в 23:49


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #5 06-07-2009, 23:27

2) Ошибка некорректного удаления кеша в функции query() класса Database

Для функции query() можно задавать время жизни файла кеша с данными конкретного SQL-запроса (5-й аргумент).

По истечении заданного времени файлы имеющие префикс заданный 4-м аргументом query(), должны удаляться. Однако удаляются все файлы кеша расположенные в /cache/sql/

Так как некоторые запросы кешируются на один час (вопрос - зачем?). То каждый час, весь кеш SQL-запросов сбрасывается.

исправление (для RUNCMS 1.6.2):

в файле /class/database/mysql.php

находим функцию query() и меняем 160 строку

PHP код:
if ($time_to_cache && @file_exists($filename) && (@filemtime($filename)+$time_to_cache<time())) $this->clear_cache($this->caching); 
на

PHP код:
if ($time_to_cache && @file_exists($filename) && (@filemtime($filename)+$time_to_cache<time())) $this->clear_cache($cache); 
Оценка сообщения (репутация)
+1 ZlydenGL положительно: Спасибо, сабж присутсвует - считал, что сделано спецом. Обязательно применю!


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
pan вне форума pan
): ǝҺɐни dиw ɐн иd⊥оwɔ

Аватар для pan

| Цитировать Старый #6 06-08-2009, 03:58

Это применимо к 1.4 ?


Напильник для RUNCMS
Строим помаленьку
Для гурманов
Мебель для дома
Посетить домашнюю страницу pan
  Сообщения: 4,777 c 15.03.2004 | Репутация: 121
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #7 06-08-2009, 06:02

Цитата:
Сообщение от pan Посмотреть сообщение
Это применимо к 1.4 ?
к 1.4 это не относится, там нет такого.


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #8 06-08-2009, 10:05

Цитата:
Сообщение от LARK Посмотреть сообщение
2) Ошибка некорректного удаления кеша в функции query() класса Database
Тут подумалось, что имеет смысл сделать чуть по другому:

меняем 160 строку на

PHP код:
if ($time_to_cache && @file_exists($filename) && (@filemtime($filename)+$time_to_cache<time())) $this->clear_cache($hash); 
т.е. в первом варианте удаляется группа файлов, а в новом конкретный файл запроса

Последний раз редактировалось LARK, 06-08-2009 в 23:55
Причина: Со строкой ошибся


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
ZlydenGL вне форума ZlydenGL
Напильникъ - наше все

Аватар для ZlydenGL

| Цитировать Старый #9 06-08-2009, 12:14

На всякий случай - в RunCMS 1.6.1 требуемая строка - номер 161 Магическое число, аднака!


Не ошибается только тот, кто ничего не делает. Ковчег построил любитель. Профессионалы строили Титаник.
  Сообщения: 777 c 22.09.2008 | Репутация: 92
Michael-XIII вне форума Michael-XIII
Стар я для всего этого

Аватар для Michael-XIII

| Цитировать Старый #10 06-08-2009, 17:25

Спасиб закоммитил


"А почему в RunCMS глючит ... ?"
"Глупые винят других. Умные – себя. А мудрые идут вперед". (С)
Посетить домашнюю страницу Michael-XIII
  Сообщения: 1,313 c 18.07.2005 | Репутация: 93
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Рейтинг@Mail.ru Хостинг провайдер Majordomo. Powered by: vBulletin Version 3.0
Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Все разделы прочитаны - Руководство форума - Архив - Вверх
Rambler's Top100
Output: 101.92 Kb. compressed to 94.37 Kb. by saving 7.55 Kb. (7.41%)
Page generated in 0.14523 seconds with 12 queries