Задания лимита времени на подгрузку файла?

Тема в разделе "PHP", создана пользователем Levitt, 25 мар 2010.

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

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    358
    Симпатии:
    36

    Написал простой код подгрузки файла с резервированием хостинга
    что-то в виде : if(!file_get_contents('http://site1.com/1.txt')){file_get_contents('http://site2.com/2.txt');}else{file_get_contents('http://site1.com/1.txt');}

    Все работало супер пока не лег основной хостинг. Теперь идут безрезультатные попытки подконектится к хостингу перед тем как задействовать резервный, из-за чего теряется довольно длинный промежуток времени.

    Есть ли способ поставить таймаут на ожидание или ограничить попытки конекта? Или может посоветуете альтернативное решение?

    п.с. от этого способа http://www.php.net/manual/en/function.file-get-contents.php#82527 ускорения не ощутил
     
  2. lobzik

    lobzik

    Регистр.:
    8 авг 2006
    Сообщения:
    311
    Симпатии:
    49
    PHP:
    <?php 

    $ctx 
    stream_context_create(array( 
        
    'http' => array( 
            
    'timeout' => 
            

        ) 
    ); 
    file_get_contents("http://example.com/"0$ctx); 
    ?>
    Вообще у контекста много настроек.
     
  3. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    358
    Симпатии:
    36
    в постскриптуме написал что разницы по времени с этим способом и без - не вижу.
     
  4. hipachka

    hipachka

    Регистр.:
    16 мар 2009
    Сообщения:
    391
    Симпатии:
    78
    а через крон нельзя этот скрипт запускать?
     
  5. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    358
    Симпатии:
    36
    нет, срдеа его использования не позволяет (дорвеи) не кешировать, не крон использовать.. реализация джабаскриптом также не к месту.
     
  6. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    Как вариант - использовать curl:
    PHP:
    $ch curl_init('http://site1.com/1.txt');
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_TIMEOUT5);
    $data curl_exec($ch);
    curl_close($ch);
     
  7. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    737
    Симпатии:
    263
    Ну решение "в лоб" - это кешировать ответ сервера у себя. И ломиться за новым не чаще, чем скажем раз в 10 минут.

    Это само по себе уже значительно сократит временные издержки.

    Следующий шаг - запоминать в файле-кеше (или рядом с ним) помимо времени создания еще и сервер, с которого этот файл был скачан. И потом, когда TTL кеша экспайрнется, ломиться в первую очередь на тот же сервер, а уж потом перебирать остальные.

    От описанной тобой проблемы это полностью избавит, плюс работать будет лучше и быстрее за счет кеширования.
     
Статус темы:
Закрыта.