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

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

  1. cvv

    cvv Гость

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

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

    MajestiC Гость

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

    cvv Гость

    Репутация:
    0
    Вот переделал скрипт на этот:

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

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