#php #mysql
#php #mysql
Вопрос:
я нахожу функцию Curl, которая может открывать определенный номер. веб-страница, открытая одновременно, также не будет выводить или возвращать данные false, что принесет больше пользы. Мне нужно получить доступ к 5-10 URL-адресам одновременно.. Я слышал, что многопоточность abt Curl, но у меня нет подходящей функции или класса для ее использования..
я нахожу некоторые из них путем поиска, но большинство из них, похоже, являются циклическими, это означает, что я не использую непрерывное соединение только одно за другим! Я хочу что-то, что может подключать несколько соединений одновременно, а не по одному!
Я сделал один :
function mutload($url){
if(!is_array($url)){
exit;
}
for($i=0;$i<count($url);$i ){
// create both cURL resources
$ch[] = curl_init();
$ch[] = curl_init();
// set URL and other appropriate options
curl_setopt($ch[$i], CURLOPT_URL, $url[$i]);
curl_setopt($ch[$i], CURLOPT_HEADER, 0);
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 0);
}
//create the multiple cURL handle
$mh = curl_multi_init();
for($i=0;$i<count($url);$i ){
//add the two handles
curl_multi_add_handle($mh,$ch[$i]);
}
$active = null;
//execute the handles
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active amp;amp; $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
//close the handles
for($i=0;$i<count($url);$i ){
curl_multi_remove_handle($mh, $ch[$i]);
}
curl_multi_close($mh);
}
хорошо! но я смущен тем, что он будет подключать все URL-адреса одновременно или по одному! mre over я загружаю контент, также я хочу только подключиться или запросить сайт, мне не нужен любой контент оттуда, я использовал RETURNTRASFER, false, но не сработал.. пожалуйста, скажите мне спасибо!
Ответ №1:
Вы ищете curl_multi_*
семейство функций. Взгляните на curl_multi_exec
.
Установите CURLOPT_NOBODY
, чтобы запретить curl загружать любой cotent.
Комментарии:
1. как вы сказали, я сделал один скрипт, пожалуйста, посмотрите!
2. @SoumoGorai обновил ответ с
CURLOPT_NOBODY
помощью .multi_
Функции будут отправлять запросы параллельно. Не могли бы вы немного уточнить, в чем заключается ваш оставшийся вопрос? У меня возникли проблемы с чтением вашего вопроса, вероятно, потому, что английский не является моим родным языком, и у вас, похоже, очень творческая орфография. Прав ли я, предполагаяmre over
, что означает «более того» иabt
«о»?3. ваш английский очень хорош! у меня нет проблем, чтобы прочитать это хорошо, это некоторые распространенные слова в наши дни, которые все равно используются! можете ли вы сказать мне, может ли мой скрипт отправлять запросы параллельно или один за другим? Спасибо
Ответ №2:
Я не тестировал ваш код, но curl_multi добавляет элементы в очередь из цикла и обрабатывает их параллельно. Иногда могут возникать проблемы, если вы пытаетесь загрузить 100 URL-адресов, но для нескольких URL-адресов все должно быть в порядке. Если у вас длительный поиск в DNS или медленные серверы, всем вашим результатам придется ждать самого медленного запроса.
Этот код протестирован и должен работать, он чем-то похож на ваш:
http://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/
Комментарии:
1. я использовал этот скрипт, который u сказал «Rolling Curl». но мне не нужно загружать как 1000 или больше, в основном 20-30 или редко 50. кроме того, свертывание Curl занимает много времени, на 3 задания требуется 468, а моя функция занимает 140 для 3 заданий! в любом случае, можете ли вы сказать мне, может ли моя функция запускать параллельное соединение или нет? Спасибо
2. curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 0); Это должно быть true, чтобы вернуть что-либо