Как кэшировать курсы валют на сайте

Приветствую всех читателей! Данная заметка является продолжением статьи про добавление курсов валют на сайт.

В недавней статье о том, как вывести курсы валют на сайте, я сказал, что далее расскажу как же кэшировать эти данные и экономить трафик.

Так вот в этой статье я просто дополню код из предыдущей статьи.

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

Давайте взглянем на код:

$kurs_file = 'kurs.txt';

// текущее время 
$time_sec = time(); 

// время изменения файла 
$time_file = filemtime($kurs_file); 

// теперь узнаем сколько прошло времени (в секундах) 
$time = $time_sec - $time_file;

//Дергаем каждый час
if( $time > 60 * 60 * 1 ){
        
$json_kurs = file_get_contents('https://query.yahooapis.com/v1/public/yql?q=select+*+from+yahoo.finance.xchange+where+pair+=+%22USDRUB,EURRUB%22&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=');

        $json_kurs = json_decode($json_kurs, true);
        $usd = $json_kurs['query']['results']['rate']['0']['Rate'];
        $euro = $json_kurs['query']['results']['rate']['1']['Rate'];
         
        echo 'Доллар: '.$usd.' | Евро: '.$euro;

        file_put_contents($kurs_file, $usd.'#'.$euro);
}else{
        $content = file_get_contents($kurs_file);
        $kurs = explode("#", $content);
        echo 'Доллар: '.$kurs[0].' | Евро: '.$kurs[1];
}

Давайте разберем код:

  1. Сначала, в переменную kurs_file мы записываем название файла, в котором и будем хранить курсы – пусть файл будет располагаться в корне сайта.
  2. В переменную time_sec записываем текущее время в секундах.
  3. В переменной time_file хранится время последнего изменения файла (последней записи в файл)
  4. В переменную time помещаем разность текущего времени и времени последнего изменения файла, и, тем самым, узнаем, сколько времени прошло с момента последней записи в файл.
  5. Из условия видно, что проверять источник данных мы будем с частотой в 1 час.
  6. Прошел 1 час – значит получаем данные и записываем их в файл, разделяя курс доллара и евро символом – “#” -решетка.
  7. Если прошло меньше 1-го часа, то просто считываем данные из файла, расщепляя строку на массив с помощью функции – explode. Подробнее об этом читайте в ответе: как разбить элементы в строке, разделенные запятой на массив.

Данный код является пример кэширования и если вы будете ставить эти курсы валют на свой сайт, то не забудьте добавить проверку курсов валют (хотя бы на пустоту) перед тек, как обновить файл.

На этом у меня все, до новых постов, удачи!

Если вам нужна помощь в создании какого-либо функционала, сайта, сервиса, тестов или калькуляторов, то готов помочь, подробнее на странице услуг.