Логин: Пароль:
Регистрация



Простой способ кэширования на PHP

Простой способ кэширования на PHP

При программировании на PHP часто бывает необходимо оптимизировать обращения к базе дынных или просто запомнить некоторые данные... Для этой цели можно использовать файлы, записывая необходимые данные в файл, а в последствии их от туда извлекать. Но в большинстве случаев запоминать приходиться достаточно разнородную информацию и писать для каждой структуры отдельную функцию очень накладно. Для решения этой задачи в PHP есть отличная функция serialize - позволяющая превратить любой массив данных в строку. А чтобы сделать обратное преобразование нам понадобится функция unserialize.

Кроме того, для кэша важно учитывать понятие давности. Для этого мы будем вычислять количество милисекунд со времени последнего редактирования файлы:

$modif=time()-@filemtime(CachePath.$VarName);

Функция для записы массива данных в файл будет выглядеть так:

function WriteCache($VarName,$Var)
{
$fh = fopen(CachePath.$VarName, "w");
$sp = serialize($Var);
fwrite($fh, $sp);
fclose($fh);
}

Функция WriteCache имеет два параметра:
$VarName - имя по которому впоследствии мы будем извлекать информацию обратно;
$Var - сам массив данных для кэширования.

Первая строчка функции открывает файл для записи. В качестве имени файла используется константа CachePath задающая путь где хранятся файлы кэша и имя кэшируемых данных $VarName. После чего массив "сериализируется" и записывается в файл.

Теперь опишем функцию чтения данных из файла:

function ReadCache($VarName, $CacheUpdate)
{
$res = false;
if(file_exists(CachePath.$VarName))
{
$modif=time()-@filemtime(CachePath.$VarName);
if ($modif < $CacheUpdate)
{
$open = fopen(CachePath.$VarName, "r");
$res = unserialize(fread($open,100000));
fclose($open);
}
}
return $res;
}

В качестве входных параметров используется имя кэшированных данных - $VarName и время жизни кэша для этой переменной - $CacheUpdate. Время жизни определяет как часто вы желаете, что бы данные обновлялись и если файл кэша обновляется последний раз более заданого периода фунция вернет значение false.

Сперва мы проверяем существование нужного нам файла, после чего проверяем на давность и лишь после этого считываем и "десериализируем" данные.

Теперь попробуем использовать написанные ранее функции для кэширования запроса из БД:

$d = ReadCache('art', CacheUpdateTime);
if ($d == false)
{
$q = mysql_query("SELECT * FROM art");
for ($i = 0; $i < mysql_num_rows($q); $i++) $d[$i] = mysql_fetch_assoc($q);
$d = mysql_fetch_assoc();
WriteCache('art',$d);
}

Сначалы пытаемся прочитать данные из кэша и если их там нет или они устарели: загружаем из БД и обновляем кэш...

Опубликовано: 7 April 2010 15:07:05
Новость смотрели: 98 раз
Опубликовано в разделе: Web-программирование

Ссылка на статью:
Поделиться ВКонтакте Поделиться в Моем Мире Добавить в Twitter Добавить в Google Buzz Добавить в FriendFeed Поделиться в Facebook Опубликовать в своем блоге livejournal.com
Сохранить закладку в Delicious Сохранить закладку в Google Забобрить Сохранить закладку в Memori.ru Сохранить закладку в Мистер Вонг
Еще больше интересного на сайте
Таблица цветов HTMLЗарабатываем на Twitter'е вместе с биржей TwiteTwitter гаджет для сайта

Чтобы оставить комментарий вам необходимо зарегистрироваться.
Комментариев нет, стань первым!
Rambler's Top100
По всем вопросам пишите на support@blackdiamondblog.biz