curl_multi парсинг в цикле

168
20 октября 2018, 06:40

При проверке условия один из сайтов где подходит совпадение по строке распостроняет ответ echo не корректно отрабатывает . приписывает ответ на последующие урлы. Как исправить помогите

<?php
    $urls = array( 
        'http://*.236/start/start.htm', 
        'http://*.245/start/start.htm', //ВОТ Здесь есть 'PtrVal[1] совпадение1
        'http://*.193/start/start.htm', // а при работе цикла 193 тоже идёт
    //ответ, хотя это не так!
    ); 
    $mh = curl_multi_init(); 
    foreach ($urls as $i => $url) { 
        $conn[$i]=curl_init($url); 
        curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1); //ничего в браузер не давать 
        curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,10); //таймаут соединения 
        curl_multi_add_handle ($mh,$conn[$i]); 
    } 
    do { 
        curl_multi_exec($mh,$active); 
    } while ($active); //Пока все соединения не отработают 
    for ($i=0; $i<count($urls); $i++) { //разбор полетов 
        $res[$i]=curl_multi_getcontent($conn[$i]); //ответ сервера в переменную 
        curl_multi_remove_handle($mh, $conn[$i]); 
        curl_close($conn[$i]); 
        $res1=implode(",", $res); 
        $main_str = htmlentities($res1); 
        if (strpos($main_str,'PtrVal[1] = &quot;1&quot;')!== false) { 
            echo '<pre>Совпадение'; 
        } 
    } 
    curl_multi_close($mh); 
?>
Answer 1

Так у Вас в коде implode собирает массив ответов в строку, включая Ваши старые ответы. Обратитесь к текущему ответу, а не ко всем уже записанным.

<?php
    $urls = array( 
        'http://*.236/start/start.htm', 
        'http://*.245/start/start.htm',
        'http://*.193/start/start.htm' 
    ); 
    $mh = curl_multi_init(); 
    foreach ($urls as $key => $url) { 
        $ch[$key] = curl_init($url); 
        curl_setopt($conn[$key], CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($conn[$key], CURLOPT_CONNECTTIMEOUT, 10); 
        curl_multi_add_handle($mh, $conn[$key]); 
    } 
    do {
        curl_multi_exec($mh, $running);
        curl_multi_select($mh);
    } while ($running > 0); 
    foreach (array_keys($ch) as $key) {
        $res[$key] = curl_multi_getcontent($ch[$key]);
        curl_multi_remove_handle($mh, $ch[$key]);
        if (strpos(htmlentities($res[$key]), 'PtrVal[1] = &quot;1&quot;') !== false) { 
            echo '<pre>Совпадение'; 
        } 
    } 
    curl_multi_close($mh); 
?>
READ ALSO
Как проверить поддержку es 2015, 2016?

Как проверить поддержку es 2015, 2016?

Хочу генерировать на сайте несколько вариантов js (es5, es2015, es2016), и отдавать клиенту нужный файл с js, в зависимости от того, какой стандарт поддерживает...

167
Непонятно как работает сетка на сайте

Непонятно как работает сетка на сайте

Пытаюсь на сайт добавить "бесконечный скролинг": необходимо чтобы при прокрутке страницы вниз загружались новые статьи (Ajax)Всё настроил,...

172
PHP 7.2.8 build с openssl на Debian

PHP 7.2.8 build с openssl на Debian

Не могу собрать php 72

186
Сравнение в PHP switch

Сравнение в PHP switch

работаю с API вконтактеСделал небольшой скрипт, где идет сравнение по Switch , сообщения пользователя, с моими данными, вот пример:

189