PDA

Просмотр полной версии : Скрипт курса валют


mff
01.08.2008, 14:44
Помогите со скиптом курса валют! Он работает, но бывает подглючивает и тормозит загрузку страницы. Не могу найти багу :confused:
<?php
$content = get_content();
$pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
$dollar = "";
$euro = "";
foreach($out as $cur){
if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]);
if($cur[2] == 978) $euro = str_replace(",",".",$cur[4]);
}
echo'<table cellpadding="0" cellspacing="0">
<tr>
<td width="50%">Доллар: </td>
<td><B>'.$dollar.'</B> руб.</td>
</tr>
<tr>
<td width="50%">Евро: </td>
<td><B>'.$euro.'</B> руб.</td>
</tr></table>';
function get_content(){
$date = date("d/m/Y");
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
$fd = @fopen($link, "r");
$text="";
if(!$fd) echo "Запрашиваемая страница не найдена";
else{
while(!feof ($fd)) $text .= fgets($fd, 4096);
}
fclose ($fd);
return $text;
}
?>

Спасибо!

geezer.code
01.08.2008, 14:49
лагать он может изза того што ты берешь данные с другого сайта. то есть сервер сначала ее скачивает а потом отдает тебе.

mff
01.08.2008, 14:51
Это понятно, но может можно както оптимизнуть? Или есть у кого более стабильный скриптец? Спасибо!

geezer.code
01.08.2008, 14:57
имхо ... я не пхп программист. но вроде тут и так всьо просто. штобы сервер не так тормозил могу предложить такую схему.
вынести это в отдельный скрипт. а на страницу подгружать аяксом. тогда он не будет тормозить остальную страницу.

mff
01.08.2008, 15:02
Вот! Это уже лучше! Спасибо geezer.code, хороший совет!

inlanger
01.08.2008, 15:05
Зачем аяксом? Просто кеш создай. А потом на кроне раз в час(например), обновляй этот кеш.

mff
01.08.2008, 15:07
inlanger подскажи как это реализовать? :(

inlanger
01.08.2008, 15:15
То, что грабишь - не на страницу выдавай, а записывай в файл. И делай это в отдельном скрипте.
А на странице - читай с файла.

Таким образом, страница будет открываться моментом, так как она читает не с удалённого сервера, а из файла.

А скрипт №1... Можешь руками его обновлять, а можешь на крон поставить ;)

mff
01.08.2008, 15:18
Сенкс inlanger! Идея тоже не плохая! Попробую так и сделать!

.::BARS::.
02.08.2008, 05:01
<?
$host = "wap.rbc.ru";
$path = "/valuta_new/index.wml";
$fp = fsockopen($host,80,$errno,$errstr,30);
if(!$fp) echo"$errstr ($errno)<br />\n";
else{
$headers = "GET $path HTTP/1.0\r\n";
$headers .= "Host: $host\r\n";
$headers .= "Accept: *\r\n";
$headers .="Accept-Charset: UTF-8\r\n"; // <<====
$headers .= "Accept-Charset: *\r\n";
$headers .= "Accept-Encoding: deflate\r\n";
$headers .= "Accept-Language: ru\r\n";
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.01\r\n\r\n";
fwrite($fp,$headers);
while($text != "\r\n") $text = fgets($fp,128);
$text = "";
while(!feof($fp)) $text .= fgets($fp,4096);
fclose($fp);
}

$text=strstr($text,'<br/>');
$end=strstr($text,'<a href="http://wap.rbc.ru/valuta_new/cis.wml');
$text=str_replace($end, '', $text);
$replace1=array (
'<a href="http://wap.rbc.ru/valuta_new/dEUR.wml">EUR</a>',
'<a href="http://wap.rbc.ru/valuta_new/dGBP.wml">GBP</a>',
'<a href="http://wap.rbc.ru/valuta_new/dUSD.wml">USD</a>');
$replace2=array (
'EUR',
'GBP',
'USD');

$text=str_replace($replace1, $replace2, $text);
$data=date("d.m.Y");

echo "$data";
echo "$text";
?>