PHP + CRON: Простое кэширование на сайте отдельных его частей

Вебмастерам часто приходится сталкиваться с реализацией кэширования сайта и не всегда нужно кэшировать страницы целиком, а лишь их часть. Будем использовать php, cron для этих целей.

На сайте moredez.ru я делал кэширование в шапке сайта курсов доллара и евро. Курс меняется согласно текущим данным Центрального банка (ЦБ). Идет обращение к сайту ЦБ, парсится курс на сегодня и сохраняется / выводится в нужно месте сайта.

На пример курса доллара и евро рассмотрим кэширование определённого блока данных с дальнейшим выводом на сайте.

Простая реализация кэша на PHP + cURL + CRON:
Алгоритм кэширования следующий:

Настраиваем обращение к скрипту посредством CRON

1. Получение информации я реализовал средствами сервера, в моё случае прекрасный хостинг sprinthost.ru позволяет по расписанию обращаться к скрипту. Линуксовская фича называется CRON — служба аля демон, читай программа, которая позволяет по расписанию выполнять задания, обращение к php скрипту в нашем случае.

Можно «обойтись» без крона, но получится велосипед. Так что идем в административную панель хостинга, ищем управление планировщик CRON:

планировщик CRON на sprinthost.ru

планировщик CRON на sprinthost.ru

Удобная и интуитивно понятная панелька sprinthost.ru позволяет указать обращение к скрипту в определённое время. Нам нужно сформировать запрос вида:

/usr/local/bin/wget -O /dev/null -q ‘http://your_site.com/cache.php’

Вам нужно поменять путь до скрипта cache.php. Далее в зависимости от хостинга указываем время. У меня обращение происходит в два аса xночи после обновления курсов доллара и евро на сайте ЦБ.

прописываем команду CRON для выполнения скрипта на сервере

прописываем команду CRON для выполнения скрипта на сервере


Создание кэш файла с нужной информацией

Файл cache.php является обработчиком — берёт информацию с сайта cbr.ru в виде XML парсит курсы и записывает в файл на сервере =)

cache.php
[slh lang=»php»]sourceUrl = $sourceUrl ? $sourceUrl : ‘http://www.cbr.ru/scripts/XML_daily.asp’;
}
public function rate(array $сodes, $date = null, $default = ‘-‘)
{
$url = $this->sourceUrl . ($date ? «?date_req=$date» : »);
if (false === $content = file_get_contents($url))
return $default;
if (false === $xml = simplexml_load_string($content))
return $default;
$results = [];
foreach ($xml->Valute as $valute)
if (in_array($valute->CharCode, $сodes))
$results[] = (object) [
‘name’ => $valute->Name,
‘value’ => $valute->Value,
‘nominal’ => $valute->Nominal
];
return $results;
}
}
//Создание кеш-файла
$h = fopen(‘cache.file’,’w’);
$currency = (new Currency)->rate([‘USD’]);
foreach ($currency as $valute)
fwrite($h,»

$ {$valute->value}
«);
$currency = (new Currency)->rate([‘EUR’]);
foreach ($currency as $valute)
fwrite($h,»€ {$valute->value}

«);
fclose($h);
?>[/slh]

Здесь класс который получает (парсит XML) актуальный курс ЦБ евро и доллара функцией simplexml_load_string(), затем эти данные сохраняются на сервере стандартной связкой fopen(), fwrite(), fclose():
[slh lang=»php»]$h = fopen(‘cache.file’,’w’);
fwrite($h,»закэшированные данные»);
fclose($h);[/slh]

Эти три строчки по сути и есть реализация простейшего кэширования. То есть сохранения данных.

Вывод кэш информации на сайте

Остается заюзать php функцию include() что бы получить кэш файл и вывести его на сайте.
У меня кэш хранится в файле «cache.file». Можете обозвать его как угодно. Дальше в нужной части сайта выводим информацию
[slh lang=»php»][/slh]

Вывод сохраненных данных на сайте

Вывод сохраненных данных на сайте


1+

Ура! Вы первые нашли эту информацию, сделайте доброе дело, поделитесь ей в: