• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Написать скрипт под Curl

  • Автор темы cvv
  • Дата начала
C

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);
но все время появлялась ошибка.
Кто знает, помогите пожалуйста, выяснить в чем заключается проблема и как надо напистаь скрипт чтобы он заработал.

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

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, но вот какой?
:)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!