Помогите исправить скрипт

Статус
В этой теме нельзя размещать новые ответы.

medwed

Создатель
Регистрация
8 Фев 2008
Сообщения
30
Реакции
0
вот есть скрипт:
<?php
// Получаем XML-файл с источника
$content = get_content();
// Разбираем содержимое, при помощи регулярных выражений
$pattern = "#<item>[\s]*<date>(.+?)</date>[\s]*".
"<code>(.+?)</code>[\s]*".
"<char3>(.+?)</char3>[\s]*".
"<size>(.+?)</size>[\s]*".
"<name>(.+?)</name>[\s]*".
"<rate>(.+?)</rate>[\s]*".
"<change>(.+?)</change>[\s]*".
"#i";
preg_match_all($pattern, $content, $out);
unset($out[0]);
for($i = 0; $i < count($out[1]); $i++) {
if($out[2][$i] == 840) $dollar = $out[6][$i];
if($out[2][$i] == 978) $euro = $out[6][$i];
if($out[2][$i] == 643) $rub = $out[6][$i];
$valdate = $out[1][1];
}
$dollar = sprintf("%.4f",$dollar/100);
$euro = sprintf("%.4f",$euro/100);
$rub = sprintf("%.4f",$rub);

$valdate = preg_replace('/^(\d{4})-(\d{2})-(\d{2})$/', '\3-\2-\1', $valdate);

function get_content() {
// Формируем ссылку к источнику валюты
$link = 'http://www.bank-ua.com/export/currrate.xml';
// Загружаем HTML-страницу
$fd = fopen($link, "r");
$text='';
if (!$fd) {
echo 'Запрашиваемая страница не найдена';
}
else {
// Чтение содержимого файла в переменную $text
while (!feof ($fd)) $text .= fgets($fd, 4096);
}
// Закрыть открытый файловый дескриптор
fclose ($fd);
return $text;
}
echo "
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<link href='files/style.css' media=all rel=stylesheet type=text/css>
<title>$PAGE_TITLE</title>
</head>
<body>
<div id='tabledom'>
<table border='0' cellpadding='0' cellspacing='0' width='100%'>
<tr>
на $valdate
</tr>
<tr class='tablezagl2'>
<td>
USD
</td>
<td>
EUR
</td>
<td>
RUB
</td>
</tr>
<tr>
<td width='33%'>
$dollar
</td>
<td width='33%'>
$euro
</td>
<td width='33%'>
$rub
</td>
</tr>
</table>
</div>
</body>
</html>
";
?>

Вы извините конешно просто я совсем новичек в пхп.В этом скрипте неправильно отображается курс по рублю там выводит - 2.0595грн. за один рубль а в одном рубле должно быть 0.2056грн.(примерно) что нужно исправить?а можно както реализовать этот скрипт так чтобы он один раз в день брал данные а ни при каждом обновлении страницы?если можно то как? буду очень благодарен если вы мне в личку скините весь скрипт с такими исправлениями..большое спасибо
 
В этом скрипте неправильно отображается курс по рублю там выводит - 2.0595грн. за один рубль а в одном рубле должно быть 0.2056грн.(примерно) что нужно исправить?

Так должно быть:
$rub = sprintf("%.4f",$rub/100);
 
Medwed, с кешированием у тебя здесь все просто.
Изменяем ф-ию, которая дерет валюты.
после строки "function get_content() {"
вписывай:
// ---
if (file_exists('currrate.xml') && (abs(filemtime('currrate.xml') - time()) < 86400))
{
return file_get_contents('currrate.xml');
}
// ---
Если есть этот файл и он не вчерашний, то читаем данные из него.

Теперь его надо сформировать после скачки, если условия выше не сработали.
После строки "while (!feof ($fd)) $text .= fgets($fd, 4096);"
добавь:
// ---
file_put_contents('currrate.xml', $text);
// ---


Так должно работать :) Возможны ошибки синтаксиса, которые легко поправить. Писал прямо в форме ответа.
 
спасиба но чото у меня выдает ошибку такого плана

"Fatal error: Call to undefined function: file_put_contents()"
 
если кешировать то через fsockopen узнавать Last-Modified
и сохранять его в отдельном конф файле на сервере вместе с остальними данными, а если Last-Modified не соответствует тому что в конф файле то считывать хмл и перезаписывать конф файл с новыми данными
 
спасиба но чото у меня выдает ошибку такого плана

"Fatal error: Call to undefined function: file_put_contents()"

PHP:
<?php
if(!function_exists('file_put_contents')) {
    function file_put_contents($filename, $content)
    {
        $fp=fopen($filename, 'w');
        fwrite($fp, $data);
        fclose($fp);
    }
}
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху