Кэшировние в 2 строчки
7 октября 2008
Ну, в 3. Или 4...
if (is_file("scriptname.session") && ($t = time() - filemtime("scriptname.session")) < $CACHE_TIME) {
$dataModel = unserialize(file_get_contents("scriptname.session"));
} else {
/* делаем что-то, и сохраняем данные в объекте $dataModel */
$f = fopen("scriptname.session", "w") and fwrite($f, serialize($req)) and fclose($f);
}
Неплохо было бы добавить auto chmod – автоматическую установку прав доступа к файлу:
if (is_file("scriptname.session") && (is_readable("scriptname.session") || chmod("scriptname.session", 0777)) &&...
При этом не забывать про безопасность – закрытие доступа к файлам *.session:
Это может быть папка с Deny from all в .htaccess.
Или .htaccess в текущей папке с
<Files *.session>
Order allow,deny
Deny from all
</Files>
Примечания:
- Мы используем функцию
is_file, а неfile_exists, т.к. вторая проверяет существование как файла, так и директории. - В переменной
$tмы сохранили сколько секунд назад истёк кеш. $CACHE_TIME = 15*60;– время истечения кеша в секундах (15 минут).$dataModel– перменная или объект класса, содержащий сессионные данные.- Вместо
file_put_contents(PHP 5 only) мы записываем сериализованные данные в файл в одной строчке черезand(чтобы следующая ф-ция выполнялась только если предыдущая вернула не-false). Мы не используем&&, ибо приоритет операций.
Форматирование кеш-даты:


