Den1xxx
Постоялец
- Регистрация
- 15 Янв 2014
- Сообщения
- 290
- Реакции
- 168
Не хочу каркать, но в таком случае проблемы обеспечены; в данном случае лучше вообще не сериализовать данные.Сериализованные данные (массивы и только массивы) хранятся просто в файлах с доступом по ключу md4. Пример: ./cache/0e/0e0b0b9dab3ebe43777ed0143c98b39a.txt
Это справедливо, повторюсь, для массивов от 500 членов и при частой записи.
При редкой записи, впрочем, может сработать.
Ключ доступа тоже стрёмный — при больших объёмах могут быть коллизии (ок 1000000 страниц — вероятность приблизится к 100%).
Лучше обратимое шифрование — base64 например больше, но однозначнее.
Я не совсем понимаю, что Вы там в данных сериализуете?
Если это кеш, то стоит ли?
Я когда-то писал в кеш вывод движка по следующей схеме:
PHP:
if (is_cache_enabled()){
//If enabled cache
$cache = new CACHE;
$cache->start_cache();
$cache->time_file_cache = $system->config['cache'];//
if (!$cache->is_fresh()) {
include_once(SYSTEM_MODULES_PATH.'output.php');
$cache->save_cache();
}
$cache->clear_cache();
if ($cache->show_cache()) echo $cache->CONTENT;
} else {
//If cache not enabled
include_once(SYSTEM_MODULES_PATH.'output.php');
}
PHP:
DEFINE('CACHE_DIR',DATA_PATH.'cache');
CLASS CACHE
{//Begin class
var $enable_cache = true;
//Хэш код файла
var $hash_code='';
//Каталог кэширования файлов
var $dir_cache = CACHE_DIR;
//Время жизни кеша в секундах
var $time_file_cache=600;
//Хранение значения контента файла
var $CONTENT;
function __construct(){
if ($this ->enable_cache) return true;
else return false;
}
/*
Показать кеш, если нет - создать.
*/
function start_cache (){
if ($this ->enable_cache) {
ob_start();
return true;
}
else return false;
}
/*
Показать кеш
*/
function show_cache() {
if ($this->is_fresh()) { //Кеш существует и не просрочен
$this->CONTENT = file_get_contents($this->dir_cache.'/'.$this->hash_code);
return true;
} else return false;
}
/*
Сохранить кеш
*/
function save_cache() {
$this->CONTENT = ob_get_contents(); //Записываем буфер в переменную
rcms_delete_files($this->dir_cache."/".$this->hash_code);
file_write_contents($this->dir_cache."/".$this->hash_code, $this->CONTENT);
}
/*
Очищаем буфер кеша
*/
function clear_cache() {
ob_end_clean();
}
/*
Проверка есть ли кеш и свежий ли он
*/
function is_fresh() {
$this->hash_code = md5($_SERVER['REQUEST_URI']); //Хэш код текущей страницы
if (is_file($this->dir_cache.'/'.$this->hash_code)) {//кеш есть
if ((filemtime($this->dir_cache.'/'.$this->hash_code)+ $this->time_file_cache) > time()) //не просрочен
return true;
} else return false;
}
}
Ещё недостаток — применение md5, но на тех проектах, где применяется — мало страниц для этого, до 10000.
Последнее редактирование: