Источником информации об официальном курсе валюты служит сайт Центробанка Российской Федерации

Обратившись по адресу сайта Центробанка http://www.cbr.ru/currency_base/XML_daily.asp?date_req=$date, где $data дата в формате ДД/ММ/ГГГГ, можно узнать курс валют, установленных в запрошенный день.

К примеру, узнать, каков был курс валюты на 14 января 2019 года, можно по адресу http://www.cbr.ru/currency_base/XML_daily.asp?date_req=14/01/2019. В результате будет открыта страница, содержащая таблицу с курсами валют, установленными в этот день. Остаётся только загрузить страницу и разобрать XML-код при помощи регулярных выражений. Ниже представлен скрипт, загружающий курсы доллара и евро с сайта Центробанка (http://www.cbr.ru)

Курс ЦБ РФ на 14.09.2024 00:00 Доллар - 90.9345 Евро - 100.7958

Пример получение курса валют на сегодня

// Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru
  $content = get_content();
  // Разбираем содержимое, при помощи регулярных выражений
  $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
  preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
  $dollar = "";
  $euro = "";
  foreach($out as $cur)
  {
    if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]);
    if($cur[2] == 978) $euro   = str_replace(",",".",$cur[4]);
  }
  echo "Доллар - ".$dollar."<br>";
  echo "Евро - ".$euro."<br>";

function get_content()
{
    // Формируем сегодняшнюю дату
    $date = date("d/m/Y");
    // Формируем ссылку
    $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date;
    // Загружаем HTML-страницу
    $fd = @fopen($link, "r");
    $text="";
    if (!$fd) echo "Сервер ЦБ не отвечает";
    else
    {
      // Чтение содержимого файла в переменную $text
      while (!feof ($fd)) $text .= fgets($fd, 4096);
      // Закрыть открытый файловый дескриптор
      fclose ($fd);
    }
    return $text;
}

Вариант получение курса валют с кешированием

list($dollar, $euro)=load_kurs();
echo "<div>Курс ЦБ РФ на <b>".date("d.m.Y H:i",filemtime($_SERVER['DOCUMENT_ROOT']."/log/kurs.txt"))."</b><br>
Доллар - <b>".$dollar."</b><br>
Евро - <b>".$euro."</b></div>";

function load_kurs()
{
define("tsKurs","15:00:00");        # Время смены курса центральным банком
$kurs_file=fb_tmpdir."kurs.txt";
if (file_exists($kurs_file)){
   $lastModified=filemtime($kurs_file);
   // каждые 24 часа, но с учетом времени смены курса центральным банком
   if (date("Y-m-d H:i:s",$lastModified) > date("Y-m-d H:i:s",time()-60*60*24) && !(date("H:i:s",$lastModified) < tsKurs && date("H:i:s")>tsKurs ) ) {
    return explode('|',file_get_contents($kurs_file));
    //echo "<!--Курс ЦБ на ".date("Y-m-d H:i:s",$lastModified)."<br>Доллар - <b>".$dollar."</b><br>Евро - <b>".$euro."</b><br>".$df1."-->";
    }
}

// Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru
$content = get_content();

if(!$content&&file_exists($kurs_file)){// считаю по старому курсу если он есть
    return explode('|',file_get_contents($kurs_file));
}

  // Разбираем содержимое, при помощи регулярных выражений
  $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
  preg_match_all($pattern, $content, $out1, PREG_SET_ORDER);
  $dollar = "";
  $euro = "";
  foreach($out1 as $cur1)
  {
    if($cur1[2] == 840) $dollar = str_replace(",",".",$cur1[4]);
    if($cur1[2] == 978) $euro   = str_replace(",",".",$cur1[4]);
  }

  if(file_put_contents($kurs_file, $kurs=($dollar.'|'.$euro))<7)die('Ошибка записи в '.$kurs_file);
  return explode('|',$kurs);
}

function get_content()
{
    // Формируем сегодняшнюю дату
    $date = date("d/m/Y");
    // Формируем ссылку
    $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date;
    // Загружаем HTML-страницу
    $fd = @fopen($link, "r");
    $text="";
    if (!$fd) echo "<h3>Сервер ЦБ не отвечает!</h3>";
    else
    {
      // Чтение содержимого файла в переменную $text
      while (!feof ($fd)) $text .= @fgets($fd, 4096);
      // Закрыть открытый файловый дескриптор
      @fclose ($fd);
    }
    return $text;
}

.