Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Скрипт курса валют (https://forum.antichat.xyz/showthread.php?t=79326)

mff 01.08.2008 14:44

Скрипт курса валют
 
Помогите со скиптом курса валют! Он работает, но бывает подглючивает и тормозит загрузку страницы. Не могу найти багу :confused:
PHP код:

<?php
$content 
get_content(); 
$pattern "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i"
preg_match_all($pattern$content$outPREG_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($fd4096); 
    }  
    
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

PHP код:

<?
$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";
?>



Время: 21:59