За последние 24 часа нас посетили 44889 программистов и 3275 роботов. Сейчас ищут 1546 программистов ...

curl

Тема в разделе "PHP для новичков", создана пользователем Kvandaik, 7 авг 2018.

  1. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Есть пример(ниже) он выдаёт страницы на экран. Ранее я работал с одиночным запросом
    и переводил html полученный код в текст и искал по совпадению (допустим Значение 1) и выводил эхом из условия . Как сделать теперь чтоб искал по совпадению т.к всё в цикле помогите.
    $document = curl_exec($curl);
    $sr = htmlentities($document);
    $main_str=$sr;
    //искомый текст
    if (strpos($main_str, 'Значение 1') !== false) {
    echo 'Ошибка';
    } elseif (strpos($main_str, 'Значение 2') !== false) {
    echo 'Всё хорошо';
    } elseif (strpos($main_str, 'Значение 3') !== true) {
    echo 'Критическая ошибка';
    }

    Код (Text):
    1.  
    2. <?php
    3. $urls  =  array(
    4.   'http://1***.245/start/start.htm',      
    5.   'http://1****.236/start/start.htm',
    6.   'http://1*****193/start/start.htm',    
    7. );
    8.  
    9. $mh=curl_multi_init();   //создаем набор дескрипторов cURL
    10.  
    11. foreach ($urls as $i=>$v){
    12.     $ch[$i]=curl_init($v);
    13.     curl_setopt($ch[$i], CURLOPT_HEADER, 0);        //Не включать заголовки в ответ
    14.    curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);//Убираем вывод данных в браузер. Пусть функция их возвращает, а не выводит
    15.     curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT,30);//Таймаут соединения
    16. //   curl_setopt($ch[$i], CURLOPT_TIMEOUT, 30);    //максимальное время выполнения всего cURL-запроса в секундах. В мульти cURL не работает, это - баг.
    17.     curl_multi_add_handle($mh, $ch[$i]);
    18. }
    19.  
    20. echo '<b>Start at '.date('H:i:s').'</b><hr>';
    21.  
    22. while (curl_multi_exec($mh, $running)==CURLM_CALL_MULTI_PERFORM);//Запускаем соединения
    23.  
    24. usleep (100000);                        //100мс. Зачем эти две строки? Пауза нужна, чтобы пропустить переходное состояние..
    25. $status=curl_multi_exec($mh, $running); //.. libcurl-a между *_PERFORM и *_OK См. "Очень важный момент" в статье
    26.  
    27. $tick=0;
    28. while ($running>0 && $status==CURLM_OK) {//Выполняем запрос, пока есть незавершенные соединения и нет ошибок мульти cURL
    29.     $text='Step '.++$tick;
    30.     $sel=curl_multi_select($mh,4);        //Note: таймаут может быть десятичной дробью, если нужно.
    31.     usleep (500000);                      //500мс. Эт чтобы два одинаковых по времени запроса за один проход цикла обрабатывались. Не обязательная пауза.
    32.     while (($status=curl_multi_exec($mh, $running))==CURLM_CALL_MULTI_PERFORM); //Вдруг cURL хочет быть вызвана немедленно опять..
    33.     $text.="<br>select amnt: $sel<br>";   //количество доступных к обработке файловых дескрипторов
    34.     $text.="running amnt: $running<br>";  //количество работающих простых дескрипторов cURL
    35.     echo $text;
    36.  
    37.     while (($info=curl_multi_info_read($mh))!=false){
    38.         $easyHandle=$info['handle'];      //простой дескриптор cURL
    39.         $one=curl_getinfo($easyHandle);
    40.         $httpCode=$one['http_code'];
    41.         if ($httpCode!=200) $httpCode="<font color='red'>$httpCode</font>";
    42.         $text="<br>URL: ${one['url']} | HTTP code: $httpCode";
    43.         $text.="<br>Total time: <b>${one['total_time']}</b><br>";
    44.       if ($httpCode==200)                //Выдать текст страницы, если он успешно получен
    45.             $text.=curl_multi_getcontent($easyHandle);
    46.         echo "$text<br>";
    47.         curl_multi_remove_handle($mh, $easyHandle);
    48.         curl_close($easyHandle);
    49.     }
    50.     echo '<hr>';
    51.     flush();
    52. }
    53. echo 'Finish at '.date('H:i:s').'<br>';
    54. echo "Finally, still running - $running, multi status - $status";
    55. curl_multi_close($mh);
    56. ?>
     
    #1 Kvandaik, 7 авг 2018
    Последнее редактирование: 7 авг 2018
  2. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Подскажите парсю url т.е html код он расшифровывается в текст и в тексте по совпадению в строке выводится тот или иной текст . Проблема в условиях При определённых расположениях http? выдаёт так
    Ошибка Ошибка Ошибка
    Всё хорошо Всё хорошо Ошибка
    Всё хорошо Ошибка Ошибка
    Как правильно доработать условие?

    <?php
    $urls = array(
    'http://1******3/start/start.htm',
    'http://1*****5/start/start.htm',
    'http://1****6/start/start.htm',
    );
    //помещаем каждую ссылку в функцию file_get_contents
    foreach($urls as $urlsItem)
    { //пропускаем каждую ссылку в цикле
    $output = curl_init(); //подключаем курл
    curl_setopt($output, CURLOPT_URL, $urlsItem); //отправляем адрес страницы
    curl_setopt($output, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($output, CURLOPT_HEADER, 0);
    $out .= curl_exec($output); //помещаем html-контент в строку
    curl_close($output); //закрываем подключение
    $main_str = htmlentities($out);

    if (strpos($main_str, 'PtrVal[1] = "1"') !== false) {
    echo 'Ошибка';
    } elseif (strpos($main_str, 'PtrVal[1] = "0"') !== false) {
    echo 'Всё хорошо';
    } elseif (strpos($main_str, 'LCD[0] = "ЗАМЕНИТЕ"') !== true) {
    echo 'Замените ';
    }
    }
    ?>