Мои извинения, я действительно задавал этот вопрос несколько раз, но так и не понял ответы.
Вот мой текущий код:
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, сколько в то время, как хорошо справляется с синтаксисом, его просто немного сухо и не очень хорошо с объяснениями.
EDIT: Okay 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.
В вашем цикле while вам нужно сделать следующее для каждого URL-адреса:
Затем вам нужно создать несколько ручек curl с помощью curl_multi_init () и добавить все предыдущие отдельные ресурсы завитка, используя curl_multi_add_handle (…)
Затем, наконец, вы можете сделать curl_multi_exec (…).
Хороший пример можно найти здесь: http://us.php.net/manual/en/function.curl-multi-exec.php