За последние 24 часа нас посетили 15820 программистов и 1666 роботов. Сейчас ищут 888 программистов ...

Ожидание выполнения операции

Тема в разделе "PHP для новичков", создана пользователем SForce, 2 ноя 2016.

  1. SForce

    SForce Новичок

    С нами с:
    26 июн 2016
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте.
    Подскажите, пожалуйста, скрипт обращается к сайту ЦентроБанка, чтобы определить актуальный курс валют. Но иногда их сайт затупливает, и соответственно не грузится мой сайт (белый экран и думает думает думает......). Так вот как сделать, чтобы если в течении 10 сек не было ответа от cbr.ru, то он просто переставал бы грузить их сайт.
    Вот скрипт:
    Код (Text):
    1. <?php
    2. $notcon=0;
    3. // Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru
    4.   $content = get_content();
    5.   // Разбираем содержимое, при помощи регулярных выражений
    6.   $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
    7.   preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
    8.   $dollar = "";
    9.   $euro = "";
    10.   foreach($out as $cur)
    11.   {
    12.     if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]);
    13.     if($cur[2] == 978) $euro   = str_replace(",",".",$cur[4]);
    14.   }
    15. if ($notcon==1){
    16.   $dollar = "65";
    17.   $euro = "74";
    18. }
    19.  
    20. function get_content()
    21. {
    22.     // Формируем сегодняшнюю дату
    23.     $date = date("d/m/Y");
    24.     // Формируем ссылку
    25.     $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date;
    26.     // Загружаем HTML-страницу
    27.     $fd = @fopen($link, "r");
    28.     $text="";
    29.     if (!$fd) {
    30.         echo "CB Server is not available";
    31.         $notcon=1;
    32.     }
    33.     else
    34.     {
    35.       // Чтение содержимого файла в переменную $text
    36.       while (!feof ($fd)) $text .= fgets($fd, 4096);
    37.       // Закрыть открытый файловый дескриптор
    38.       fclose ($fd);
    39.     }
    40.     return $text;
    41. }
    42. ?>
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    делай через cron, а не каждый запрос пользователя, обновляй раз в 12 часов например

    timeout соединения
     
    topas и SForce нравится это.
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @SForce, лучше отдельной задачкой периодически получать актуальные курсы требуемых валют, писать их в свою базу, их которой Ваш сайт будет их брать без всяких подвисаний.
    К тому-же у cbr есть разные варианты получения данных: http://www.cbr.ru/scripts/Root.asp.
     
    denis01 нравится это.