We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 785
    • 2,113 Posts
    Привожу простейший сниппет, выводящий курсы доллара и евро на основе данных Банка России. Рекомендуется перед использованием доработать сниппет под свои нужды. Также есть широкий простор для оптимизации – сейчас сниппет явно не оптимален, но работает правильно. Пример вывода результата можно посмотреть на странице примера курсов валют.
    Выводится приблизительно такой текст:

    Сегодня четверг, 27 декабря 2007 года, курсы валют по отношению к рублю установлены на торгах, состоявшихся 26 декабря 2007 года.
    Курс доллара США: 24.7019, снижение на 0.0177.
    Курс евро: 35.6152, рост на 0.0313.


    Итак, исходный текст (используется кодировка UTF-8):


    <?php
    setlocale (LC_ALL, ’ru_RU.UTF8’);
    $url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=";
    $content = file_get_contents ($url.date("d/m/Y"));

    function XMLToArray($xml) {

    $parser=xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser,$xml,$values);
    xml_parser_free($parser);
    $return = array();
    $stack = array();
    $return["Date"] = $values[0]["attributes"]["Date"];
    foreach($values as $val) {

    if($val[’type’] == "open") {
    if($val[’tag’] == "Valute") $val[’tag’].=$val[attributes][ID];
    array_push($stack, $val[’tag’]);
    } elseif($val[’type’] == "close") {
    array_pop($stack);
    } elseif($val[’type’] == "complete") {
    array_push($stack, $val[’tag’]);
    setArrayValue($return, $stack, $val[’value’]);
    array_pop($stack);
    }
    }
    ;
    return $return;
    }

    function setArrayValue(&$array, $stack, $value) {
    if ($stack) {
    $key = array_shift($stack);
    setArrayValue($array[$key], $stack, $value);
    return $array;
    } else {
    $array = $value;
    }
    }

    $array = XMLToArray($content);

    $dollarmain=str_replace(",",".",$array[’ValCurs’][’ValuteR01235’][’Value’]);
    $euromain=str_replace(",",".",$array[’ValCurs’][’ValuteR01239’][’Value’]);
    $mdate=str_replace(".","/",$array[’Date’]);

    $date = explode("/",$mdate);
    $prev = mktime(1,0,0,$date[1],$date[0],$date[2])-86400;

    $contentp = file_get_contents ($url.date("d/m/Y", $prev));
    $arrayp = XMLToArray($contentp);

    $dollarchange=$dollarmain-str_replace(",",".",$arrayp[’ValCurs’][’ValuteR01235’][’Value’]);
    $eurochange=$euromain-str_replace(",",".",$arrayp[’ValCurs’][’ValuteR01239’][’Value’]);

    if (($dollarchange) < 0) {$dollarct = ’, снижение на ’;} else {$dollarct = ’, рост на ’;}
    if (($eurochange) < 0) {$euroct = ’, снижение на ’;} else {$euroct = ’, рост на ’;}

    $ret= ’<p>Сегодня <strong>’.mb_strtolower (strftime("%A, %d %B %Y"),’UTF-8’).’ года</strong>, курсы валют по отношению к рублю установлены на торгах, состоявшихся ’.mb_strtolower (strftime("%d %B %Y", $prev),’UTF-8’).’ года.</p>’;
    $ret.= ’<p>Курс доллара США: <strong>’.$dollarmain.’</strong>’.$dollarct.number_format(abs($dollarchange), 4).’.</p>’;
    $ret.= ’<p>Курс евро: <strong>’.$euromain.’</strong>’.$euroct.number_format(abs($eurochange), 4).’.</p>’;
    return $ret;
    ?>


      Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
      Статьи о MODx, регулярно новые публикации
      • 26564
      • 162 Posts
      Все работало до того момента, пока хостер не поставил PHP5 huh
        • 785
        • 2,113 Posts
        Quote from: security at Feb 28, 2008, 09:51 AM

        Все работало до того момента, пока хостер не поставил PHP5 huh
        Дело не в PHP5 – у меня именно в этой версии все работает. Скорее изменились настройки PHP, может, какие-то модули не установлены. Как вариант, возможно отсутствует поддержка mbstring.
          Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
          Статьи о MODx, регулярно новые публикации
          • 17459
          • 268 Posts
          или сконфигурировали без XML

          --disable-xml

          поглядите, что phpinfo() показывает
            • 26564
            • 162 Posts
            Нашел только вот это-
            ’--with-libxml-dir=/usr/local’

            libXML support  active 
            libXML Version  2.6.31 
            libXML streams  enabled 

            Где смотреть поддерживается ли mbstring?
              • 785
              • 2,113 Posts
              Quote from: security at Feb 29, 2008, 02:37 PM

              Где смотреть поддерживается ли mbstring?
              Проверить, extension_loaded(’mbstring’) выдает истину или ложь. Но вообще-то проблема может и в другом быть - нужно смотреть, что конкретно не работает. Но версия PHP точно не влияет.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
                • 26564
                • 162 Posts
                $str = extension_loaded('mbstring');
                echo $str; 

                Выдает - "1"

                Сам снипет работает (показывает текущую дату) , но не показывает курс и видимо соответственно снижение или повышение 0.00000.
                  • 785
                  • 2,113 Posts
                  Не знаю, что и почему не работает. Надо на конкретном хостинге отлавливать ошибку. Скорее или не читаются исходные данные с сайта или XML неверно преобразуется, но конкретно сказать трудно.
                    Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                    Статьи о MODx, регулярно новые публикации