В форумном движке 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 файлов в кэше), а компиляция сделана через регулярные выражения, что по определению не быстро. Отключить кэширование можно при редактировании шаблонов, когда мы не можем удалить старые версии из кэша.
Да согласен, файлов дохера, причем редактировать шаблон напргает постоянно удалять хешь. Спс за помощь сам искать не стал ибо в коде не кайф ковыряться.
Огромное спасибо за информацию! Как раз появилась необходимость отключить sql-кеширование в этом движке.