Курс валют на сайте!

Модератор: Злобный

Ответить
Аватара пользователя
Bozeak
Юзер
Сообщения: 62
Зарегистрирован: Сб мар 17, 2007 16:40
Откуда: Кишинёв
Контактная информация:

Курс валют на сайте!

Сообщение Bozeak »

После долгово брождения по гуглу, всётаки нашел ПХП скриптык который преобразовывает XML инфу в нормальный формат!
На локалке правил, подстраивал, всё работало. Скинул на хост всё тоде самое а оно мне выбивает ошибку :
Warning: fopen(): URL file-access is disabled in the server configuration in /home/www/mgbs.md/curs.php on line 14

Warning: fopen(http://bnm.md/md/official_exchange_rate ... 16/05/2008): failed to open stream: no suitable wrapper could be found in /home/www/mgbs.md/curs.php on line 14
Короче понял что посылает лесом! :(

Код: Выделить всё

 <?
define('PATH','downloads/');

function getTodayFileName(){
  return PATH.'kurs_valut_'.date('dmy').'.htm';
}
function getYesterdayFileName(){
  return PATH.'kurs_valut_'.date("dmy",mktime(0,0,0,date("m") ,date("d")-1,date("Y"))).'.htm';
}
function getValKurs(&$val,$date=null){
  if($date==null) $date = date("d/m/Y");
  $link = "http://bnm.md/md/official_exchange_rates?get_xml=1&date=$date";
  // Загружаем HTML-страницу
  $fd = fopen($link, "r");
  $content="";
  if($fd){
    // Чтение содержимого файла в переменную $content
    while(!feof ($fd)) $content .= fgets($fd, 4096);
  } else return;
    // Закрыть открытый файловый дескриптор
    fclose ($fd);
  // Разбираем содержимое, при помощи регулярных выражений
  $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
  preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
  $val['dollar'] = "";
  $val['euro'] = "";
  foreach($out as $cur){
    if($cur[2] == 840) $val['dollar'] = doubleVal(str_replace(",",".",$cur[4]));
    if($cur[2] == 978) $val['euro'] = doubleVal(str_replace(",",".",$cur[4]));
  }
}


if(!file_exists(getTodayFileName())){
  $val_today = array();
  $val_yesterday = array();
  // получаем курсы валют
  getValKurs($val_today);
  getValKurs($val_yesterday,date("d/m/Y",mktime(0,0,0,date("m") ,date("d")-1,date("Y"))));
  // ставим признак, поднялся курс или нет
  $dollar_up = ($val_today['dollar']-$val_yesterday['dollar'] > 0 ? true : false);
  $euro_up = ($val_today['euro']-$val_yesterday['euro'] > 0 ? true : false);
  tempnam('downloads',getTodayFileName());
  $fp = fopen(getTodayFileName(), "w");
  // пошел HTML код со вставкой полученных данных курсов валют, имените его как вам необходимо
  fwrite($fp,'<table>
<tr>
<td><img src="img/curs/USD.gif" width="19" height="11" />&nbsp;&nbsp;<strong>USD</strong> </td>
<td align="right"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$val_today['dollar'].'</strong></td>
</tr>
<tr>
<td><img src="img/curs/EUR.gif" width="19" height="11" />&nbsp;&nbsp;<strong>EUR</strong> </td>
<td align="right"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$val_today['euro'].'</strong></td>
</tr>
</table>
');
  fclose($fp);
  if(file_exists(getYesterdayFileName())) unlink(getYesterdayFileName());
}

readfile(getTodayFileName());
?>
Номер строки с ошибкой выпадает на $fd = fopen($link, "r");
Помогите пожалуйста разобраться!
Аватара пользователя
M@li4iK
Старожил
Сообщения: 1660
Зарегистрирован: Пт дек 22, 2006 09:40
Откуда: Из детского сада.

Сообщение M@li4iK »

Bozeak,
Блин..а зайти на сайт bnm.md и проверить имя фаила?! :)
Изменился формат - причем давно уже.
http://bnm.md/md/official_exchange_rate ... 16.05.2008

Короче не слеши 16/05/2008 а точки 16.05.2008

Удачи ;)
Аватара пользователя
Bozeak
Юзер
Сообщения: 62
Зарегистрирован: Сб мар 17, 2007 16:40
Откуда: Кишинёв
Контактная информация:

Сообщение Bozeak »

Короче до попы ему все эти игры в точки-слэши! Это в первую очередь что я хотел сказать!
А во вторых на локальном сайте с этим проблем нету!
Просто уже задумался о смене хостинга! Там где сейчас стоит сайт, PHP версии 4.4 и насколько я понял, из прочитаного в нете, это может быть той самой причиной данной ошибки!
Аватара пользователя
ZorroGFS
Продвинутый
Сообщения: 961
Зарегистрирован: Вт сен 10, 2002 11:25
Откуда: Кишинёв
Контактная информация:

Сообщение ZorroGFS »

Я понимаю если бы пхп выдавал бы ошибки а-ля "ошибка №214986214555745 в строке 14" и сиди гадай что он имел ввиду, так нет же, человеческим языком тебе пишет "URL file-access is disabled in the server configuration" - отключен данный вариант fopen (по ссылке) в конфигурации данного сервена, иными словами на хостинге данная опция отключена.

посмотри на пхпинфо хостинга, может там курл прикручен - юзай его вместо фопена
Аватара пользователя
Bozeak
Юзер
Сообщения: 62
Зарегистрирован: Сб мар 17, 2007 16:40
Откуда: Кишинёв
Контактная информация:

Сообщение Bozeak »

ZorroGFS писал(а):Я понимаю если бы пхп выдавал бы ошибки а-ля "ошибка №214986214555745 в строке 14" и сиди гадай что он имел ввиду, так нет же, человеческим языком тебе пишет "URL file-access is disabled in the server configuration" - отключен данный вариант fopen (по ссылке) в конфигурации данного сервена, иными словами на хостинге данная опция отключена.

посмотри на пхпинфо хостинга, может там курл прикручен - юзай его вместо фопена
Я не професиональный программист и пока-что учусь, так-что если можно то по подробней раскажите о способностях этой функции!
Да фопен там отключен, но про курл я там ничего не видел!
Аватара пользователя
ZorroGFS
Продвинутый
Сообщения: 961
Зарегистрирован: Вт сен 10, 2002 11:25
Откуда: Кишинёв
Контактная информация:

Сообщение ZorroGFS »

например:

Код: Выделить всё

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://bnm.md/md/official_exchange_rates?get_xml=1&date=16.05.2008");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$page=curl_exec($ch);
curl_close($ch);
echo $page;
?>
подробнее - http://www.php.net/manual/ru/book.curl.php
Аватара пользователя
sota
Продвинутый
Сообщения: 405
Зарегистрирован: Ср май 09, 2007 15:48

Сообщение sota »

или через сокеты

Код: Выделить всё

<?php
$domain='www.bnm.md';
$url='/md/official_exchange_rates?get_xml=1&date=16.05.2008';	

$fp = fsockopen($domain, 80, $errno, $errstr, 30);
$buffer='';
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET $url HTTP/1.1\r\n";
    $out .= "Host:$domain\r\n";
    $out .= "User-Agent: ".$_SERVER["HTTP_USER_AGENT"]."\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    $tmp=0;
    while (!feof($fp)) {
    	$output=fgets($fp, 128);
    	if($tmp)	
        	$buffer.=$output;
    	if ($output=="\r\n")
    		$tmp=1;
    }
    fclose($fp);
}
echo $buffer;
?>
Аватара пользователя
Bozeak
Юзер
Сообщения: 62
Зарегистрирован: Сб мар 17, 2007 16:40
Откуда: Кишинёв
Контактная информация:

Сообщение Bozeak »

sota писал(а):или через сокеты
:beer: Вот этот вариант пошел! :D На curl тоже ругается!
Теперь другуой вопрос: как мне из XML списка выбрать только нужные мне значения и как внедрить их в HTML формат, або сейчас мне выбиваеться весь список существующих валют в списке НацБанка! :? :o
:help: Помогите коль не трудно начинающему :kettle:
Аватара пользователя
sota
Продвинутый
Сообщения: 405
Зарегистрирован: Ср май 09, 2007 15:48

Сообщение sota »

Bozeak,

надо начать с другого
скрипт должен открывать какой нибудь файлик у тебя на хосте
смотреть есть ли там на сегодня курс
если его нет, то лезть на бнм и вставлять себе в файлик курс, чтобы следующий раз уже брать его локально а не лезть опять за ним на сайт нацбанка
Аватара пользователя
Bozeak
Юзер
Сообщения: 62
Зарегистрирован: Сб мар 17, 2007 16:40
Откуда: Кишинёв
Контактная информация:

Сообщение Bozeak »

sota писал(а):Bozeak,

надо начать с другого
скрипт должен открывать какой нибудь файлик у тебя на хосте
смотреть есть ли там на сегодня курс
если его нет, то лезть на бнм и вставлять себе в файлик курс, чтобы следующий раз уже брать его локально а не лезть опять за ним на сайт нацбанка
Ну вот предыдущий скрипт что наверху вставлен автоматом, ежедневно заходил на бнм и пионерил данные по двум валютам и папке downloads/ создавал ХТМЛ файлик который выводил в читаемый вид инфу !
Вот надо сделать тоже самое только без fopen и curl_init.
как это сделать?
Аватара пользователя
sota
Продвинутый
Сообщения: 405
Зарегистрирован: Ср май 09, 2007 15:48

Сообщение sota »

Bozeak писал(а):Ну вот предыдущий скрипт что наверху вставлен автоматом, ежедневно заходил на бнм и пионерил данные по двум валютам и папке downloads/ создавал ХТМЛ файлик который выводил в читаемый вид инфу !
Вот надо сделать тоже самое только без fopen и curl_init.
как это сделать?
тогда вместо этой функции:

Код: Выделить всё

function getValKurs(&$val,$date=null){
  if($date==null) $date = date("d/m/Y");
  $link = "http://bnm.md/md/official_exchange_rates?get_xml=1&date=$date";
  // Загружаем HTML-страницу
  $fd = fopen($link, "r");
  $content="";
  if($fd){
    // Чтение содержимого файла в переменную $content
    while(!feof ($fd)) $content .= fgets($fd, 4096);
  } else return;
    // Закрыть открытый файловый дескриптор
    fclose ($fd);
  // Разбираем содержимое, при помощи регулярных выражений
  $pattern = "#<Valute ID="([^"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
  preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
  $val['dollar'] = "";
  $val['euro'] = "";
  foreach($out as $cur){
    if($cur[2] == 840) $val['dollar'] = doubleVal(str_replace(",",".",$cur[4]));
    if($cur[2] == 978) $val['euro'] = doubleVal(str_replace(",",".",$cur[4]));
  }
} 
ставишь эту:

Код: Выделить всё

function getValKurs(&$val,$date=null){
  if($date==null) $date = date("d.m.Y");
 
// Загружаем HTML-страницу
$domain="www.bnm.md";
$url="/md/official_exchange_rates?get_xml=1&date=$date";   

$fp = fsockopen($domain, 80, $errno, $errstr, 30);
$content='';
if (!$fp) {
    return;
} else {
    $out = "GET $url HTTP/1.1\r\n";
    $out .= "Host:$domain\r\n";
    $out .= "User-Agent: ".$_SERVER["HTTP_USER_AGENT"]."\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    $tmp=0;
    while (!feof($fp)) {
       $output=fgets($fp, 128);
       if($tmp)   
           $content.=$output;
       if ($output=="\r\n")
          $tmp=1;
    }
    fclose($fp);
}

  // Разбираем содержимое, при помощи регулярных выражений
  $pattern = "#<Valute ID="([^"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
  preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
  $val['dollar'] = "";
  $val['euro'] = "";
  foreach($out as $cur){
    if($cur[2] == 840) $val['dollar'] = doubleVal(str_replace(",",".",$cur[4]));
    if($cur[2] == 978) $val['euro'] = doubleVal(str_replace(",",".",$cur[4]));
  }
} 
Аватара пользователя
Bozeak
Юзер
Сообщения: 62
Зарегистрирован: Сб мар 17, 2007 16:40
Откуда: Кишинёв
Контактная информация:

Сообщение Bozeak »

Сцуккии!

Код: Выделить всё

Warning: fsockopen() has been disabled for security reasons in /home/www/mgbs.md/curs.php on line 17

Warning: fsockopen() has been disabled for security reasons in /home/www/mgbs.md/curs.php on line 17
fsockopen тоже отключен! :cranky:
Аватара пользователя
sota
Продвинутый
Сообщения: 405
Зарегистрирован: Ср май 09, 2007 15:48

Сообщение sota »

меняй хостинг :)
Аватара пользователя
Bozeak
Юзер
Сообщения: 62
Зарегистрирован: Сб мар 17, 2007 16:40
Откуда: Кишинёв
Контактная информация:

Сообщение Bozeak »

sota писал(а):меняй хостинг :)
:) Уже занялся этим!
Жду скорого обновления нэймсерверов а там уже посмотрим!
Спасибо за помощь! :beer: :)
Ответить

Вернуться в «Программирование»