L-S1mk@ Опубликовано 16 Января 2008 Жалоба Поделиться Опубликовано 16 Января 2008 Приветствую всех. Имеет проблема со скриптом, которую я не могу решить.Имеется скрипт, который обращается к определеному сайту через 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, но вот какой? Зарание спасибо. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 16 Января 2008 Жалоба Поделиться Опубликовано 16 Января 2008 Вот что делал ваш код:$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 уже запрашивает данные по нужному адресу Т.е. приведённый выше участок кода с помощь 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 для понимания Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.