Перейти к контенту

Настроить CURL!


Рекомендуемые сообщения

Приветствую всех. Имеет проблема со скриптом, которую я не могу решить.

Имеется скрипт, который обращается к определеному сайту через fopen и загружает от туда инфу. Но надо переделать этот скрипт чтобы он обращался через Curl.

 

Вот сам скрипт:

 

<?php	
define('PATH','cache/');

function getTodayFileName(){
 return PATH.'curs_'.date('dmy').'.dat';
}
function getYesterdayFileName(){
 return PATH.'curs_'.date("dmy",mktime(0,0,0,date("m") ,date("d")-1,date("Y"))).'.dat';
}

function getValKurs(&$val,$date=null){ 
 if($date==null) $date = date("d/m/Y"); 
 $link = "http://cbr.ru/scripts/XML_daily.asp?date_req=$date"; 
 $fd = fopen($link, "r"); 
 $content=""; 
 if($fd){ 
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('cache',getTodayFileName());
 $fp = fopen(getTodayFileName(), "w");
 fwrite($fp,'<span style="color:#F26D00;font-size:120%"><b>$</b></span> USD ЦБ <b>'.$val_today['dollar'].'</b> '.($dollar_up ? '' : '').'<br><span style="color:#F26D00;font-size:120%"><b>?</b></span> EUR ЦБ <b>'.$val_today['euro'].'</b> '.($euro_up ? '' : '').'');
 fclose($fp);
 if(file_exists(getYesterdayFileName())) unlink(getYesterdayFileName());
} 

readfile(getTodayFileName());
?>

 

 

Как я понял, за соеденение отвечает этот код:

 

$fd = fopen($link, "r")

 

Пробовал заменять его на все возможные варианты, например этот:

 

$ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $link);
 $fd = curl_exec($ch);
 curl_close($ch);

 

но все время появлялась ошибка.

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

 

==========

 

Вот переделал скрипт на этот:

 

<?php	
define('PATH','cache/');

function getTodayFileName(){
 return PATH.'curs_'.date('dmy').'.dat';
}
function getYesterdayFileName(){
 return PATH.'curs_'.date("dmy",mktime(0,0,0,date("m") ,date("d")-1,date("Y"))).'.dat';
}

function getValKurs(&$val,$date=null){ 
 if($date==null) $date = date("d/m/Y"); 
 $link = "http://cbr.ru/scripts/XML_daily.asp?date_req=$date"; 


  $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $link);
 $fd = curl_exec($ch);
 curl_close($ch);


 $content=""; 
 if($fd){ 
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('cache',getTodayFileName());
 $fp = fopen(getTodayFileName(), "w");
 fwrite($fp,'<span style="color:#F26D00;font-size:120%"><b>$</b></span> USD ЦБ <b>'.$val_today['dollar'].'</b> '.($dollar_up ? '' : '').'<br><span style="color:#F26D00;font-size:120%"><b>?</b></span> EUR ЦБ <b>'.$val_today['euro'].'</b> '.($euro_up ? '' : '').'');
 fclose($fp);
 if(file_exists(getYesterdayFileName())) unlink(getYesterdayFileName());
} 

readfile(getTodayFileName());
?>

 

 

 

Появляется ошибка:

 

Warning: feof(): supplied argument is not a valid stream resource in /var/www/***/curs.php on line 23

Warning: fgets(): supplied argument is not a valid stream resource in /var/www/***/curs.php on line 23

Warning: feof(): supplied argument is not a valid stream resource in /var/www/***/curs.php on line 23

Warning: fgets(): supplied argument is not a valid stream resource in /var/www/***/curs.php on line 23

Warning: feof(): supplied argument is not a valid stream resource in /var/www/***/curs.php on line 23

 

И эти сообщения идут до бесконечности. Как я понял что тут какойто глюк с feof и fgets, но вот какой? :D

 

Зарание спасибо.

Ссылка на комментарий
Поделиться на других сайтах

Вот что делал ваш код:

$link = "http://cbr.ru/scripts/XML_daily.asp?date_req=$date"; // Это адрес
$fd = fopen($link, "r"); // Открываем на чтение
$content=""; // Переменная для полученных данных
if($fd) // Открылся?
{
while(!feof ($fd)) $content .= fgets($fd, 4096); // Пока не кончатся данные читаем их по 4К(М?)б и дописываем в переменную
}else return;
fclose ($fd); // Закрываем поток

А вы его когда переделывали, после открытия потока через cUrl закрывате. А потом пытаетесь читать из пустого ресурса что-то. У вас же curl_exec уже запрашивает данные по нужному адресу :D Т.е. приведённый выше участок кода с помощь cUrl должен выглядеть примерно так:

  $link = "http://cbr.ru/scripts/XML_daily.asp?date_req=$date"; 


  $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $link);
 $content = curl_exec($ch);
 curl_close($ch);

Примерно, потому что я с курлом не работал.

 

P.S. Читайте php.net/curl для понимания ;)

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.