Как я могу отправить данные GET на несколько URL-адресов одновременно, используя cURL? - PullRequest
3 голосов
/ 26 апреля 2010

Мои извинения, я действительно задавал этот вопрос несколько раз, но так и не понял ответы.

Вот мой текущий код:

while($resultSet = mysql_fetch_array($SQL)){            
$ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
            curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
            curl_exec($ch);                                 //Execute the cURL
            curl_close($ch);                                //Close it off 
} //end while loop

То, что я здесь делаю, - это получение URL-адресов из базы данных MySQL ($ resultSet ['url']), добавление к ней дополнительных переменных, просто некоторых данных GET ($ fullcurl), и простой запрос страниц. Это запускает скрипт, запущенный на этих страницах, и это все, что нужно сделать этому скрипту, это запустить эти скрипты. Не нужно возвращать какой-либо вывод. Просто загрузите страницу достаточно долго для запуска скрипта.

Однако в настоящее время он загружает каждый URL (в настоящее время 11) по одному. Мне нужно загрузить их все одновременно. Я понимаю, что мне нужно использовать curl_multi_ , но я не имею ни малейшего представления о том, как работают функции cURL, поэтому я не знаю, как изменить свой код для использования curl_multi_ в цикле while.

Итак, мои вопросы:

Как я могу изменить этот код для загрузки всех URL-адресов одновременно? Пожалуйста, объясните это, а не просто дайте мне код. Я хочу знать, что конкретно делает каждая отдельная функция. Будет ли curl_multi_exec работать даже в цикле while, поскольку цикл while просто отправляет каждую строку по одной за раз?

И конечно, любые ссылки, руководства, руководства по функциям cURL также были бы хорошими. Желательно не столько от php.net, сколько от того, что он дает мне синтаксис, он просто маленький сухой и не очень хороший с объяснениями.

РЕДАКТИРОВАТЬ: Хорошо, Zaf, вот мой текущий код на данный момент:

        $mh = curl_multi_init(); //set up a cURL multiple execution handle

$SQL = mysql_query("SELECT url FROM urls") or die(mysql_error()); //Query the shell table
                    while($resultSet = mysql_fetch_array($SQL)){   

        $ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
        curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
        curl_multi_add_handle($mh, $ch);
    } //No more shells, close the while loop

        curl_multi_exec($mh);                           //Execute the multi execution
        curl_multi_close($mh);                          //Close it when it's finished.

1 Ответ

3 голосов
/ 26 апреля 2010

В вашем цикле while для каждого URL необходимо сделать следующее:

  • создать ресурс curl с помощью curl_init ()
  • установка параметров для ресурса с помощью curl_setopt (..)

Затем вам нужно создать несколько дескрипторов curl с помощью curl_multi_init () и добавить все предыдущие отдельные ресурсы curl с помощью curl_multi_add_handle (...)

Тогда, наконец, вы можете сделать curl_multi_exec (...).

Хороший пример можно найти здесь: http://us.php.net/manual/en/function.curl-multi-exec.php

...