За последние 24 часа нас посетили 17866 программистов и 1614 роботов. Сейчас ищет 1481 программист ...

Получение страницы со стороннего сервера + таймаут

Тема в разделе "Решения, алгоритмы", создана пользователем Dagdamor, 1 фев 2008.

  1. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Очень простая функция, которая позволить дергать страницы с других серверов, не рискуя повесить свой, если сторонний сервер не отвечает. Для работы требуется cURL.

    PHP:
    1. <?php
    2.  
    3. function file_get_contents_timeout($filename, $timeout=3)
    4. {
    5.   if(strpos($filename,"://")===false) return file_get_contents($filename);
    6.   if(!function_exists("curl_init")) return false;
    7.   $session=curl_init($filename);
    8.   curl_setopt($session,CURLOPT_MUTE,true);
    9.   curl_setopt($session,CURLOPT_RETURNTRANSFER,true);
    10.   curl_setopt($session,CURLOPT_CONNECTTIMEOUT,$timeout);
    11.   curl_setopt($session,CURLOPT_TIMEOUT,$timeout);
    12.   curl_setopt($session,CURLOPT_USERAGENT,"Mozilla/5.0 (compatible)");
    13.   $result=curl_exec($session);
    14.   curl_close($session);
    15.   return $result;
    16. }
    Примеры использования:

    PHP:
    1. <?php
    2.  
    3. $yandex=file_get_contents_timeout("http://yandex.ru"); // HTML-текст
    4. $error=file_get_contents_timeout("http://no.site"); // false
    Таймаут задается в секундах. По умолчанию - 3.
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    А почему не fsockopen()? Он везде еть в отличии от cURL.
     
  3. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    lexa
    Потому что функция была бы гораздо более объемной тогда ;)
    Но ты можешь написать такую, будет хорошая альтернатива.
     
  4. mr.Den

    mr.Den Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Саранск
    странно но у меня меньше ;)
     
  5. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Dagdamor
    Ну не сильно объемной. Попробовал, накидал.

    PHP:
    1.  
    2. <?php
    3. function file_get_content_timeout ($URL, $timeout = 3){
    4.     $timeout = (int) $timeout;
    5.     if ($timeout < 1) $timeout = 1;
    6.     $Error = "Can't connect to remote URL";
    7.     $content = '';
    8.  
    9.     if ($handler = fsockopen ($URL, 80, $Error, $Error, $timeout)){
    10.  
    11.     $H = "GET / HTTP/1.1\r\n";
    12.     $H.= "Host: $URL\r\n";
    13.     $H.= "Connection: Close\r\n\r\n";
    14.  
    15.     fwrite($handler, $H);
    16.  
    17.     while (!feof ($handler)){
    18.         $content.= fread ($handler, 4096);
    19.     }
    20.  
    21.     fclose ($handler);
    22.     echo $content;
    23.     }
    24. }
    25.  
    26. file_get_content_timeout ('blog.warhour.ru', 10);
    27. ?>
    28.