Отключение кэширования в phpBB

В форумном движке phpBB кэширование реализовано через файлы. Кэшируется всё подряд. Например, каждый sql-запрос кладется в отдельный файл, а так как для каждого пользователя выборка из базы может отличаться, то кэш вырастает до 150 000 файлов — реальный пример из жизни (на форуме всего лишь 70 тем и 700 пользователей). Всё это дерьмище лежит в одной папке и немного нагружает чтение с диска. Но в моем случае проблема была в обновлении кэша. Дело в том, что кэшируются еще и шаблоны. Поэтому при изменении шаблона, нужно обновить кэш — это можно сделать через админку. Вот здесь и начинаются проблемы с удалением из папки с десятками тысяч файлов. Скрипт удаления кэша падает с ошибкой 500.

Казалось бы, стандартное решение — отключить кэширование sql-запросов в админке, но такие настройки отсутствуют. Пришлось покопаться в исходниках.

Отключение кэширования sql-запросов

1) Файл /includes/db/mysql.php
Метод sql_query()

Скрываем строку
//$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
И пишем вместо нее
$this->query_result = false;

2) Файл /includes/acm/acm_file.php
Метод sql_save()
В самое начало метода пишем строчку
return;

Отключение кэширования шаблонов

Файл /includes/template.php
Метод sql_save()

Скрываем строку
//$recompile = (($config['load_tplcompile'] && @filemtime($filename) < filemtime($this->files[$handle])) || !file_exists($filename) || @filesize($filename) === 0) ? true : false;
И пишем вместо нее
$recompile = true;

Теперь шаблоны будут каждый раз браться не из кэша, а перекомпилироваться из исходников. Исходные шаблоны обычно лежат в папке /styles/prosilver/template/

Но лучше включить кэширование шаблонов. Много места они не занимают (20-50 файлов в кэше), а компиляция сделана через регулярные выражения, что по определению не быстро. Отключить кэширование можно при редактировании шаблонов, когда мы не можем удалить старые версии из кэша.

#1

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

RAKETA161, 12.11.2011 - 13:30
#2

Огромное спасибо за информацию! Как раз появилась необходимость отключить sql-кеширование в этом движке.

Виктория, 28.01.2012 - 11:52
Оставить комментарий