Курс Евро ЦБ РФ для расчетов на сайте.

Гриша К.

Новичок
Курс Евро ЦБ РФ для расчетов на сайте.

Есть php код получения курса евро с сайта rbc.ru
На хостинге agava.ru он не работатет, иногда даже не извлекает курс.

Подскажите, пожалуйста, в чем ошибка кода и возможно кто-то знает варианты получения курса евро ЦБ, для расчетов на сайт.

$link = "http://www.rbc.ru/out/802.csv";
$file = fopen($link, "r");
$rf = fread($file, 10000);
$var = eregi( "EUR ЦБ РФ,(.*)", $rf, $title);
fclose($file);
$curs = substr("$title[1]",13,5);
 

Гриша К.

Новичок
SiMM, спасибо за ответ.
На моем компьютере этот код работает, а на agava.ru, выводит пустое значение.
И у других людей он также работает, но иногда так же не выводит значение.
 

SiMM

Новичок
> На моем компьютере этот код работает, а на agava.ru, выводит пустое значение.
Беллетристику оставь для себя. Если код работает - незачем было вообще задавать вопрос. Однако если ты всё же считаешь, что код не работает - тебе прямая дорога в PHP FAQ: Ничего не работает! Что делать???. Ссылку тебе дали не для того, чтоб услышать от тебя "спасибо", а для того, чтобы ты с ней ознакомился и ВЫПОЛНЯЛ данные там инструкции.
 

Гриша К.

Новичок
SiMM, я все это проделал, и на свеом компьютере и на хостинге, и никаких ошибки мне не выдаются. Просто скрипт выводит пустое значение на хостинге. Я не знаю, что делать еще, надеюсь на то, что кто-нибудь знает другие варианты получения курсов валют.
 

Мутник

Новичок
а вообще я бы на твоем месте посмотрел такую функцию, как [m]explode[/m] - для того вообще формат csv и есть ;)

Хотя, кому как удобнее.
 

Гриша К.

Новичок
Мутник и tristram, спасибо за помощь. Попробую разобраться с этими функциями.

А еще у меня есть такой вариант кода, получения курса евро ЦБ РФ.
[Код работает везде, но из-за него страницы загружаются в два раза дольше и иногда, выдается ошибка, о том, что привышен лимит какого-то времени в 30 секунд).]
Я получил этот код, урезанием из более крупного кода, методом тыка, так как в PHP у меня мало знаний.
Не поможите ли мне разобраться, нет ли в нем ничего лишнего. (В конце я привел полный код)
PHP:
$eur = 35;

if (@ $fp = fopen("http://www.rbc.ru/out/802.csv", "r"))
  { 
    while (!feof($fp)) { 
        $buffer = fgets($fp, 4096); 
	if (strchr($buffer,"EUR ЦБ РФ"))
      { 
        list($usd,,$dat,$rate,$ism)=explode(',',$buffer); 
      } 
  } fclose($fp); 
    $rate=str_replace(chr(10),"",$rate); 
    $rate=str_replace(chr(13),"",$rate);
    //echo $rate; вывводит курс Евро в формате 00,0000
}
Вот полный код
PHP:
if ($fp = fopen("http://www.rbc.ru/out/802.csv", "r")){ 
    while (!feof($fp)) { 
        $buffer = fgets($fp, 4096); 
    if (strchr($buffer,"USD ЦБ РФ")){ 
        list($usd,,$dat,$rate,$ism)=explode(',',$buffer); 
        $curs.="$dat : USD $rate ($ism)"; 
    } 
    if (strchr($buffer,"EUR ЦБ РФ")){ 
        list($usd,,$dat,$rate,$ism)=explode(',',$buffer); 
        $curs.="  EURO $rate ($ism)"; 
    } 
    if (strchr($buffer,"GBP ЦБ РФ")){ 
        list($usd,,$dat,$rate,$ism)=explode(',',$buffer); 
        $curs.="  GBP $rate ($ism)"; 
    } 
    } fclose($fp); 
    $curs=str_replace(chr(10),"",$curs); 
    $curs=str_replace(chr(13),"",$curs); 
//    echo $curs; 
}
 

Dor

Новичок
Надо прописать действие, на тот случай, если файл не удалось открыть.
Или хранить этот файл у себя, обновляя раза два в сутки (cron). Для расчетов, где выставляемый счет обычно действует до 10-ти дней, неточность курса в полдня не критична. При этом, не помешает проверка - удалось ли правильно скопировать файл.

$usd, $dat, $ism в твоем коде не используются - стоит ли их вообще объявлять?
 

physh

поедатель запятых
> хранить этот файл у себя, обновляя раза два в сутки (cron).
крон даже не озателен - обновлять можно при первом же запросе, а для других брать уже из своих ресурсов.
 

Гриша К.

Новичок
Dor и physh спасибо большое за ответы.
- Если файл не удалось открыть, у меня есть условие if(!$fp) $rate=35;
- А вот как хранить этот файл усебя и автоматически обновлять его, раза два в сутки я незнаю, вручную это не хорошо.
Не подскажите ли как обновлять такой файл и проверить правильно ли скопировался файл.

-~{}~ 24.08.05 15:23:

=============================================

Подскажите пожалуйста как можно сделать так, чтобы если я сохраню файл 802.csv у себя на сайте, то сделать так, чтобы он автоматически обновлялся например один раз в сутки с сайта www.rbc.ru.

Я упростил код до такого варианта.
PHP:
$rate = 35;

if (@ $fp = fopen("http://www.rbc.ru/out/802.csv", "r"))
   { 
    while (!feof($fp)) 
	{ 
        $buffer = fgets($fp, 4096);

    if (strchr($buffer,"EUR ЦБ РФ"))
        list(,,,$rate,)=explode(',',$buffer); 

    	} 

   fclose($fp); 
  }

   echo $rate;
 

kvf77

Red Devil
Гриша К.

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

Гриша К.

Новичок
kvf77, спасибо за ответ.
Вот я и незнаю как сделать, так, чтобы курсы, можно было читать 1 раз в день автоматически и сохранять у себя.
Подскажите пожалуйста как это сделать.
 

alexhemp

Новичок
1. если курса на сегодня нет там где ты его хранишь то считывем курс с RBC и записываем туда, где будем хранить
2. Считываем курс оттуда, где хранишь его и показываем.
 

Гриша К.

Новичок
alexhemp, спасибо за ответ. Но не могли бы вы мне показать это на примере, я не понимаю как написать такой код (условие), чтобы все это проходило автоматически. Помогите пожалуйста.
 

alexhemp

Новичок
Гриша К.

Нет код я писать не буду, для меня это просто не интерсно да и для вас толку не будет.

Вам нужно хранить как минимум пару чисел - дату и курс.
Можно хранить список значений - прямая дорога хранить это в БД.

Сперва решите - нужна ли вам история или достаточно текущего на сегодня курса.

Получать его уже научились. Теперь - запишите туда, где решили хранить. Подсказка - посмотрите раздел руководства FileSystem.
 

Гриша К.

Новичок
alexhemp, спасибо за совет, попробую разобраться.

Вообще то я не программист, так получается, что я делаю один большой проект сам и мне приходится заниматься программированием, мне главное, чтобы был результат, а буду я понимать код или нет, мне не столь важно. Я в будущем лучше буду заказывать работу программистам, о пока нет таких возможностей.

Коды которые я привел в этой теме, я писал не сам, я их немного урезал и все.


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

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

kvf77

Red Devil
Гриша К.

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

alexhemp

Новичок
Гриша К.

Это форум - для программистов. Если ты не программист, зачем тратишь наше и свое время.

Если решил писать сам по каким-то причинам - что-же придется стать программистом хоть отчасти. Иначе найди программиста который тебе это сделает. В этом разделе - таких нет. Советом помогут, а писать за тебя - никто не будет.
 

Гриша К.

Новичок
alexhemp, kvf77 спасибо за советы.

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

- Я узнал что есть такая функция copy(откуда, куда) и rename().
- Предполагаю, что буду копировать курс и текущую дату в БД.
- Затем проверять равна ли текущая дата, используя date() ( так чтобы можно было сравнить), дате в базе данных, если нет, то копирую, обновляю файл с курсами валют.

Но для этого мне надо будет заходить на страницу, где находятся этот код и ведь только тогда, будет происходить выполнение кода, а можно сделать так, чтобы код без меня выполнялся.
И можно ли сравнивать даты.
 
Сверху