Авто-загрузка Курса валют

Тема в разделе "ABO CMS", создана пользователем ddust, 5 авг 2009.

Статус темы:
Закрыта.
  1. ddust

    ddust Постоялец

    Регистр.:
    8 июн 2007
    Сообщения:
    120
    Симпатии:
    16
    Нужна Авто-загрузка Курса валют - может кто помочь?
     
  2. SexKiller

    SexKiller

    Регистр.:
    20 апр 2006
    Сообщения:
    211
    Симпатии:
    45
    Если есть источник откуда его брать, то работы на 5-10 минут.
     
  3. ddust

    ddust Постоялец

    Регистр.:
    8 июн 2007
    Сообщения:
    120
    Симпатии:
    16
    Брать с сайта www.cbr.ru или www.rbc.ru
    и еще нужно к USD +3%? а к Eur +1%
     
  4. SexKiller

    SexKiller

    Регистр.:
    20 апр 2006
    Сообщения:
    211
    Симпатии:
    45
  5. ddust

    ddust Постоялец

    Регистр.:
    8 июн 2007
    Сообщения:
    120
    Симпатии:
    16
    Ну вроде все сделал, но в файл не записывается.
    Получаю вот такое:
    Файл ../admin/files/catalog_rates.txt недоступен для записи
    Вот код:
    Код:
    <?php
    $filename = '/admin/files/catalog_rates.txt';
    $addr = "http://stock.rbc.ru/demo/cb.0/intraday/";
    $begblock1 = "Доллар США";
    $begblock2 = "ЕВРО";
    $begin = "<TD>";
    $end = "</TD>";
    $result = array( );
    $screen = file( $addr );
    $i = 0;
    while ( $i < sizeof( $screen ) && strpos( $screen[$i], $begblock1 ) == false )
    {
    	++$i;
    }
    $temp = explode( $begin, $screen[$i + 1] );
    $temp = explode( $end, $temp[1] );
    $kursdollar = $temp[0] + $temp[0] * 3 / 100;
    $i = 0;
    while ( $i < sizeof( $screen ) && strpos( $screen[$i], $begblock2 ) == false )
    {
    	++$i;
    }
    $temp = explode( $begin, $screen[$i + 1] );
    $temp = explode( $end, $temp[1] );
    $kurseuro = $temp[0] + $temp[0] * 1 / 100;
    $kursdollar = round( $kursdollar, 4 );
    $kurseuro = round( $kurseuro, 4 );
    $eurodollar = round( $kurseuro / $kursdollar, 4 );
    echo "Курс валют:<br> $begblock1 = $kursdollar<br> $begblock2 = $kurseuro<br> EUR/USD = $eurodollar";
    $somecontent = "Добавить это к файлу\n";
    // Вначале давайте убедимся, что файл существует и доступен для записи.
    if (is_writable($filename)) {
        // открываем $filename
    fwrite().
        if (!$handle = fopen($filename, 'w')) {
             echo "Не могу открыть файл ($filename)";
             exit;
        }
        // Записываем $somecontent в наш открытый файл.
        if (fwrite($handle, "USD/RUR:$kursdollar\r\n".''."EUR/RUR:$kurseuro\r\n"."EUR/USD:$eurodollar"."\r\n") === FALSE) {
            echo "Не могу произвести запись в файл ($filename)";
            exit;
        }
        echo "<br> Записано в файл ($filename)";
        fclose($handle);
    } else {
        echo "<br>Файл $filename недоступен для записи";
    }
    ?> 
    
    На localhost все работает, а на сервере - нет.
    Подскажите что не так.
    Где ошибся.
     
  6. El_Magnifico

    El_Magnifico Команданте

    Регистр.:
    1 сен 2006
    Сообщения:
    653
    Симпатии:
    487
    надеюсь права на файл ты выставить не забыл ?
     
  7. ddust

    ddust Постоялец

    Регистр.:
    8 июн 2007
    Сообщения:
    120
    Симпатии:
    16
    Да везде, и на папки и на файл поставил 777
     
  8. ddust

    ddust Постоялец

    Регистр.:
    8 июн 2007
    Сообщения:
    120
    Симпатии:
    16
    Разобрался!
    Если кому надо, то:
    1. в файле /admin/files/.htaccess стоит запрет на все, убрал.
    2. В cron вешать ничего не надо, а в панели управления ->Скрипты создать новый и вставить код:
    Код:
    <?php
    $filename = '/...../admin/files/catalog_rates.txt';
    // Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru 
      $content = get_content(); 
    // Разбираем содержимое, при помощи регулярных выражений 
      $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i"; 
      preg_match_all($pattern, $content, $out, PREG_SET_ORDER); 
      $kursdollar = ""; 
      $kurseuro = ""; 
      $eurodollar = "";
      foreach($out as $cur) 
      { 
        if($cur[2] == 840) $kursdollar = str_replace(",",".",$cur[4]); 
        if($cur[2] == 978) $kurseuro   = str_replace(",",".",$cur[4]); 
      } 
    // Курс USD +3% и курс Евро +1%, округление до 2 знаков после запятой
    $kursdollar = $kursdollar + $kursdollar * 3 / 100;
    $kurseuro = $kurseuro + $kurseuro * 1 / 100;
    $kursdollar = round( $kursdollar, 2 );
    $kurseuro = round( $kurseuro, 2 );
    $eurodollar = round( $kurseuro / $kursdollar, 2 );
    echo "Доллар - ".$kursdollar."<br>"; 
    echo "Евро - ".$kurseuro."<br>"; 
    //echo "Евро/Доллар - ".$eurodollar."<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; 
      } 
    $somecontent = "Добавить это к файлу\n";
    // Вначале давайте убедимся, что файл существует и доступен для записи.
    if (is_writable($filename)) {
        // В нашем примере мы открываем $filename в режиме "дописать в конец".
        // Таким образом, смещение установлено в конец файла и
        // наш $somecontent допишется в конец при использовании fwrite().
        if (!$handle = fopen($filename, 'w')) {
             echo "Не могу открыть файл ($filename)";
             exit;
        }
        // Записываем $somecontent в наш открытый файл.
    //	fwrite($handle, $kursdollar.';'.$handle, $kurseuro);
    //fwrite($handle, $_GET['p1'].';'.$_GET['p2'].';'.$_GET['p3']);
        if (fwrite($handle, "USD/RUR:$kursdollar\r\n".''."EUR/RUR:$kurseuro\r\n"."EUR/USD:$eurodollar"."\r\n") === FALSE) {
    //echo "Не могу произвести запись в файл ($filename)";
            exit;
        } 
    //echo "<br> Записано в файл ($filename)";
        fclose($handle);
    } else {
    //echo "<br>Файл $filename недоступен для записи";
    }
    ?>
    
    3. На главной странице Добавить блок -> Скрипт
    Все!
    При загрузке главной страницы обновляется курс валют!
     
    paul_rem и daniel1987 нравится это.
  9. daniel1987

    daniel1987 Постоялец

    Регистр.:
    26 июл 2007
    Сообщения:
    53
    Симпатии:
    9
    Попробовал выполнить все указания по исполнению скрипта - так и не вышло. Предполагаю, что загвоздка в файле .htaccess. Может кто сможет написать содержимое файла описанного в п. 1 инструкции от ddust'a?
     
  10. ddust

    ddust Постоялец

    Регистр.:
    8 июн 2007
    Сообщения:
    120
    Симпатии:
    16
    Посмотри права на папку мой_сайт/admin/files и на сам файл catalog_rates.txt
    А файл .htaccess попробуй просто удалить или переименовать.
     
Статус темы:
Закрыта.