2010-08-10 5 views
2

Я хотел бы пойти немного глубже в кэширование Smarty, поэтому у меня есть несколько простых вопросов ...Smarty кэшированных файлы недействительность

  1. манипулировать кэш недействительность Я хочу знать, что каталог хранения Smarty это кэш Например, все кэшированные страницы, связанные с user_id=123, я хочу сохранить по адресу cache/users/123/. Где cache - это гибкий кеширующий реж. Как я могу сказать smarty хранить кеш, связанный с user_id=123, по адресу cache/users/123/? Будет ли Smarty хранить кэш под-шаблонов в этом каталоге?

  2. Есть ли рекомендации по очистке кеша в этом каталоге? Я думаю, что простое удаление файлов из этого каталога может привести к некоторым ошибкам, если некоторые посетители сейчас посещают эти страницы (может произойти ошибка, когда smarty увидит, что этот кеш-шаблон найден, но кеш-подматрица не найден, потому что он уже удален, например).

Любые рекомендации и советы.

спасибо.

ответ

0

Взгляните на документах Smarty:... в раздел «Cache Groups» ли именно это

.
0

Использование можно переключить Smarty CacheDir, в зависимости от того, где вы хотите (вы можете проверить, что с некоторыми собственными, если это-заявления)

// Create smarty object 
$smarty = new Smarty(); 

// Change smarty-dir is like this: 
if (isset($_GET['userId'])) { 
    $smarty->compile_dir = '/path/to/dir/' . $_GET['userId']; 
} else { 
    $smarty->compile_dir = '/path/to/dir/default'; 
} 

Точка два немного сложнее, вы должны Foreach через весь MAPPS, и назначить новую компиляцию Дир, а затем выполните следующую команду:

$smarty->clear_cache(); 

Но, как вы сказали, что это возможно файл запрашивается в то время как есть удалить. :-(


Но это не рекомендуется использовать различные папки кэша, Smarty не кэширует вывод, только скомпилированный PHP-файл.

+0

Благодарим вас за ответ. Есть ли способ установить подкаталог кеша, тогда как '$ smarty-> cache_dir' установлен в один каталог (' $ smarty-> cache_dir = '/ path/to/cache''). Думаю, это решит огромную нагрузку. Я знаю, что если '$ smarty-> use_sub_dirs = true', мы можем определить путь к кешу непосредственно в cache_id ('/user/123/'), но Smarty также добавит свои собственные дополнительные подкаталоги в наш cache_id, поэтому в результате мы получим что-то вроде ('/ user/123 /% 12 /% 23 /% 45 /'). Вы знаете, как этого избежать? – Kirzilla

+0

Когда вы устанавливаете значение true, вы можете использовать differen cache_id каждый раз ($ smarty-> fetch ('file', 'cacheId') и $ smarty-> display ('file', 'cacheId')). – Ronn0

+0

Smarty делает оба типа кеширования, если вы их активируете. Вы также можете кэшировать скомпилированные шаблоны и конечный результат. – djn

1

Вы должны НЕ очистить кэш вручную. Используйте clear_cache() и clear_compiled_tpl() для этого Вы можете очистить весь кэш, а также сделать выборочную очистку с ними

Смежные вопросы