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

Тема в разделе "PHP программирование", создана пользователем cvv, 14 янв 2008.

  1. cvv

    cvv Гость

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

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

    Код (Text):
    <?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());
    ?>
    Как я понял, за соеденение отвечает этот код:
    Код (Text):
     $fd = fopen($link, "r")
    Пробовал заменять его на все возможные варианты, например этот:
    Код (Text):
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $link);
    $fd = curl_exec($ch);
    curl_close($ch);
    но все время появлялась ошибка.
    Кто знает, помогите пожалуйста, выяснить в чем заключается проблема и как надо напистаь скрипт чтобы он заработал.

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

    MajestiC Гость

    Пост из себя не несет полезной инфы. Какая именно ошибка была?
     
  3. cvv

    cvv Гость

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

    Код (Text):
    <?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());
    ?>

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

    Код (Text):
    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, но вот какой?
    :)
     
Загрузка...

Поделиться этой страницей