У кого-нибудь работает кэширование страниц (COutputCache)?

Решил попробовать кэширование страниц, делаю по руководству:

В конфиге:




'cache'=>array(

    'class' => 'CFileCache',

),



В контроллере:




    public function filters() {

	return array(

	'accessControl',

	array(

	'COutputCache',

	'duration'=>3600,

	),

	);

    }



Однако кэш-файл пересоздается всякий раз. Стал разбираться и выяснилось, что для файлового кэша условием его актуальности будет ($time=@filemtime($cacheFile))>time() (функция getValue в CFileCache.php), т.е. файл должен создаваться со временем модификации = текущее время + время жизни кэша. Для кэша структур таблиц БД в этом же проекте это так и есть, а в случае кэширования страниц с COutputCache - время изменения файла равно времени его создания, т.о. кэш устаревает сразу после создания.

Коллеги, не дайте погибнуть, уже всю голову сломал. У кого-нибудь работает кэширование страниц (связка COutputCache и CFileCache)?

Сейчас проверил кэширование данных (Yii::app()->cache->set/get) - такая же история, файл кэша создается со временем модификации, равным текущему времени, и потому кэш сразу устаревает. Получается, проблема с CFileCache. Может настройки в конфиге нужны дополнительные? Но структура-то БД кэшируется нормально. Или проблема может быть в том, что гоняю сайт под Денвером в Win7?

Нашел обидчика. setValue в CFileCache


if(@file_put_contents($cacheFile,$value,LOCK_EX)==strlen($value))

По этому условию получаю неравенство 53167 != 35807 и последующие проблемы.

53167 - точный размер сохраненного файла с кэшем. Страница в utf-8, соответствующие php-переменные в .htaccess настроены, строковые функции преобразуются в многобайтные по дефолту, mb_strlen($value, ‘UTF-8’) дает то же число 35807.

Прошу помощи. Не знаю, в какую сторону дальше рыть.

Update: да, если подставить mb_strlen($value, ‘latin1’), то получаю верное число, т.е. считаются байты, а не символы. Что посоветуете? Отключить автопреобразование функций в многобайтные? Насколько корректно остальной код фреймворка будет работать с utf в этом случае?

Спасибо всем, что выслушали :), проблема решилась отменой перегрузки строковых функций “mbstring.func_overload 7” => “mbstring.func_overload 1”