1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

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

Тема в разделе "Web Coding", создана пользователем medwed, 23 фев 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. medwed

    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. laszlo

    laszlo Постоялец

    Регистр.:
    16 фев 2008
    Сообщения:
    74
    Симпатии:
    38
    Так должно быть:
    $rub = sprintf("%.4f",$rub/100);
     
  3. Genie

    Genie Прохожие

    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);
    // ---


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

    medwed Создатель

    Регистр.:
    8 фев 2008
    Сообщения:
    30
    Симпатии:
    0
    спасиба но чото у меня выдает ошибку такого плана

    "Fatal error: Call to undefined function: file_put_contents()"
     
  5. xorbit13

    xorbit13 Создатель

    Регистр.:
    9 фев 2008
    Сообщения:
    41
    Симпатии:
    10
    если кешировать то через fsockopen узнавать Last-Modified
    и сохранять его в отдельном конф файле на сервере вместе с остальними данными, а если Last-Modified не соответствует тому что в конф файле то считывать хмл и перезаписывать конф файл с новыми данными
     
  6. mister

    mister Писатель

    Регистр.:
    10 фев 2008
    Сообщения:
    6
    Симпатии:
    0
    PHP:
    <?php
    if(!function_exists('file_put_contents')) {
        function 
    file_put_contents($filename$content)
        {
            
    $fp=fopen($filename'w');
            
    fwrite($fp$data);
            
    fclose($fp);
        }
    }
    ?>
     
Статус темы:
Закрыта.