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

Настроить 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 для понимания ;)

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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