Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Написать скрипт под Curl
Форум программистов > Интернет и сети > Web-программирование > PHP программирование
cvv
Приветствую всех. Имеет проблема со скриптом, которую я не могу решить.
Имеется скрипт, который обращается к определеному сайту через 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);

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

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


Пост из себя не несет полезной инфы. Какая именно ошибка была?
cvv
Вот переделал скрипт на этот:

<?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, но вот какой?
sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.