Приветствую всех читателей! Данная заметка является продолжением статьи про добавление курсов валют на сайт.
В недавней статье о том, как вывести курсы валют на сайте, я сказал, что далее расскажу как же кэшировать эти данные и экономить трафик.
Так вот в этой статье я просто дополню код из предыдущей статьи.
Кэшировать мы будем с помощью текстового файла, который будем обновлять с определенной частотой.
Давайте взглянем на код:
$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]; }
Давайте разберем код:
- Сначала, в переменную kurs_file мы записываем название файла, в котором и будем хранить курсы – пусть файл будет располагаться в корне сайта.
- В переменную time_sec записываем текущее время в секундах.
- В переменной time_file хранится время последнего изменения файла (последней записи в файл)
- В переменную time помещаем разность текущего времени и времени последнего изменения файла, и, тем самым, узнаем, сколько времени прошло с момента последней записи в файл.
- Из условия видно, что проверять источник данных мы будем с частотой в 1 час.
- Прошел 1 час – значит получаем данные и записываем их в файл, разделяя курс доллара и евро символом – “#” -решетка.
- Если прошло меньше 1-го часа, то просто считываем данные из файла, расщепляя строку на массив с помощью функции – explode. Подробнее об этом читайте в ответе: как разбить элементы в строке, разделенные запятой на массив.
Данный код является пример кэширования и если вы будете ставить эти курсы валют на свой сайт, то не забудьте добавить проверку курсов валют (хотя бы на пустоту) перед тек, как обновить файл.
На этом у меня все, до новых постов, удачи!
Если вам нужна помощь в создании какого-либо функционала, сайта, сервиса, тестов или калькуляторов, то готов помочь, подробнее на странице услуг.