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

Тема в разделе "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');}

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

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

    п.с. от этого способа Перейти по ссылке ускорения не ощутил
     
  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
    Сообщения:
    735
    Симпатии:
    261
    Ну решение "в лоб" - это кешировать ответ сервера у себя. И ломиться за новым не чаще, чем скажем раз в 10 минут.

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

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

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