Проблемы с извлечением данных с внешней веб-страницы в PHP - PullRequest
0 голосов
/ 26 августа 2018

У меня есть скрипт, который отвечает за извлечение имен людей с внешней веб-страницы путем передачи идентификатора в качестве параметра.Примечание: информация, предоставленная этим внешним сайтом, является общедоступной, каждый может проверить эти данные.Это код, который я создал:

      function names($ids)
        {
        $url = 'https://www.exampledomain.com/es/query_data_example?name=&id='.$ids;


        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER,array("Accept-Lenguage: es-es,es"));
        curl_setopt($ch, CURLOPT_TIMEOUT,10);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        $html = curl_exec($ch);
        $error = curl_error($ch);
        curl_close($ch);

         preg_match_all('/<tr class="odd"><td><a href="(.*?)">/',$html ,$matches);

         if (count($matches[1] == 0)) 
         {
            $result = "";
         }
         else if(count($matches[1] == 1)) 
         {
            $result = $matches[1][0];
            $result = str_replace('/es/person/','', $result);
            $result = substr($result, 0,-12);
            $result = str_replace('-', ' ', $result);
            $result = ucwords($result);
         }

        return $result; 
            }

Примечание2: в переменной $ url я поместил пример URL, это не настоящий URL.Это просто точный пример исходного URL, который я использую в своем коде.

Я выполняю вызов функции и показываю результат с эхом:

  $info = names('8476756848');
  echo $info;

и всеидеально, я извлек имя человека, которому принадлежит этот идентификатор.

Проблема возникает, когда я пытаюсь запросить эту функцию в цикле for (или while), поскольку у меня есть массив с множеством идентификаторов

    $myids = ["2809475460", "2332318975", "2587100534", "2574144252", "2611639906", "2815870980", "0924497817", "2883119946", "2376743158", "2387362041", "2804754226", "2332833975", "258971534", "2574165252", "2619016306", "2887098054", "2449781007", "2008819946", "2763767158", "2399362041", "2832047546", "2331228975", "2965871534", "2574501252", "2809475460", "2332318975", "2587100534", "2574144252", "2611639906", "2815870980", "0924497817", "2883119946", "2376743158", "2387362041", "2804754226", "2332833975", "258971534", "2574165252", "2619016306", "2887098054", "2449781007", "2008819946", "2763767158", "2399362041", "2832047546", "2331228975", "2965871534", "2574501252", "2809475460", "2332318975", "2587100534", "2574144252", "2611639906", "2815870980", "0924497817", "2883119946", "2376743158", "2387362041", "2804754226", "2332833975", "258971534", "2574165252", "2619016306", "2887098054", "2449781007", "2008819946", "2763767158", "2399362041", "2832047546", "2331228975", "2965871534", "2574501252"];
    //Note: These data are for example only, they are not the real ids.

      $size = count($myids);

     for ($i=0; $i < $size; $i++) 
        { 
        //sleep(20); 

        $data = names($myids[$i]);

        echo "ID IS:  " . $myids[$i] . "<br> THE NAME IS: " . $data . "<br><br>";
        }

Результат примерно такой:

        ID IS: 258971534
        THE NAME IS: 

        ID IS: 2883119946
        THE NAME IS:

и так далее.Я имею в виду, он показывает мне идентификаторы, но имена не извлекают их из функции имен.Он показывает мне весь список идентификаторов, но в случае с именами он не показывает никаких, как будто имена функций не работают.Если я добавлю только 3 идентификатора в массив и снова запущу цикл for, он выдаст имена этих трех идентификаторов, потому что их мало.Но когда массив содержит много идентификаторов, функция уже не возвращает имен.Как будто множественные запросы не принимают их или ограничивают их, я не знаю.Я поместил функцию set_time_limit (0) в начале моего php-файла;чтобы избежать этого, я получаю ошибку превышения времени в 30 секунд.

, потому что я думал, что именно поэтому функция не работает, но она не работает.Также попробуйте поместить sleep (20) в цикл, прежде чем вызывать имена функций, чтобы проверить, не слишком ли быстро он делал много запросов к указанной веб-странице, но он также не работал.

Этот скриптуже работаю на сервере, который я нанял, и у меня есть эта проблема, которая не позволяет моему скрипту работать должным образом.

Примечание. Могут быть массивы с более чем 2000 идентификаторами, или я даже готовлю скрипт, который будет читатьфайлы .txt и .csv, которые будут содержать более 10000 идентификаторов, которые я извлеку из каждого файла и назову именем функции, а затем эти идентификаторы и имена будут сохранены в таблице из базы данных mysql.

Кто-то будет знать, почему имена не извлекаются, когда существует много идентификаторов, но когда их мало, например, 1 или 10, имя функции работает?

...