За последние 24 часа нас посетили 17433 программиста и 1638 роботов. Сейчас ищут 2106 программистов ...

Подскажите решение без cURL

Тема в разделе "PHP для профи", создана пользователем samimages, 4 янв 2018.

  1. samimages

    samimages Новичок

    С нами с:
    4 янв 2018
    Сообщения:
    10
    Симпатии:
    1
    Здравствуйте!
    Допустим есть файл на 1000 строк; 1 строка 1 домен - задача, получить заголовки.

    Так долго:

    PHP:
    1. <?
    2. $headers = get_headers($url, 1);
    3. ...
    4. ?>
    и так долго:

    PHP:
    1. <?
    2. file_get_contents($urldomain);
    3. $reprint =  $http_response_header[0];
    4. ...
    5. ?>
    Есть вариант использовать cURL, но он не желательный...
    Как можно ускорить процесс? Есть какие-то другие методы?
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Если пропускная способность позволяет, то сделать параллельно несколько запросов, а не последовательно
     
    samimages нравится это.
  3. samimages

    samimages Новичок

    С нами с:
    4 янв 2018
    Сообщения:
    10
    Симпатии:
    1
    @denis01, относительное решение нашлось здесь же)))
    Оставляем:

    PHP:
    1. <?
    2. file_get_contents($urldomain);
    3. $reprint =  $http_response_header[0];
    4. ...
    5. ?>
    И берем отсюда: код тайм аута

    PHP:
    1. <?
    2.  
    3.     'http' => array(
    4.         'timeout' => 1
    5.         )
    6.     )
    7. );
    8.  
    9. file_get_contents($urldomain, 0, $ctx);
    10. $reprint =  $http_response_header[0];
    11. ...
    12. ?>
    Разница 140 секунд без тайм аута и 23 секунды с ним на 50 адресов
     
    denis01 нравится это.
  4. biryukovm

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

    С нами с:
    15 окт 2015
    Сообщения:
    54
    Симпатии:
    1
    Создай цыкл по JS через ajax запусти все строки и хай комп тормознет зато запишешь все. Ускорить ты не сможешь только если делать параллельный cURL
    Правильно настраиваешь cURL радуйся жизни я с ним столько сайтов распарсил.
    cURL загони в функцию и все он тебе все сам от тарабанит только не забывай про апачь и SQL если используешь надо будет увеличивать таймауты
     
  5. samimages

    samimages Новичок

    С нами с:
    4 янв 2018
    Сообщения:
    10
    Симпатии:
    1
    biryukovm, это спортивный интерес)) Вопщем ряд тестов, особенно с заокеанскими хостами, убедительно показал, что нужно отдавать юзерагента stream_context_create - добрать до комплекта.

    В среднем 3500 секунд на 1500 хостов... сойдет