Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > curl_milti


Автор: lancelot555 27.4.2007, 13:24
есть скрипт использующий функции curl_multi
Код

    $mh = curl_multi_init();
    foreach ($us as $i => $url) {
        $conn[$i]=curl_init($url);
        curl_setopt($conn[$i], CURLOPT_URL, $url);
        curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($conn[$i], CURLOPT_HEADER, 1);
        curl_setopt($conn[$i], CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($conn[$i], CURLOPT_TIMEOUT, 20);
        curl_multi_add_handle ($mh,$conn[$i]);
    }

    do { $n=curl_multi_exec($mh,$active); } while ($active);

    foreach ($us as $i => $url) {
        $res[$i]=curl_multi_getcontent($conn[$i]);
        $result = $res[$i];
# что то делаем с контентом
        }
        curl_multi_remove_handle($mh,$conn[$i]);
        curl_close($conn[$i]);
    }
    curl_multi_close($mh);

если нужно сделать только один запрос в сессии все рабоет нормально, но как сделать так чтобы можно было делать несколько запросов в одной курл сессии? от есть установили курл опции, сделал exec, затем поменяли опции сделали еще один exec и так несколько раз.. Как это реализовать?  smile 
В этом скрипте после строчки # что то делаем с контентом нужно менять курл опции и делать запрос на другой урл но не закрывая курлсессию
как это грамотно сделать??? help plz

Автор: WolfON 27.4.2007, 13:38
точно также, как вы настраиваете опции для всего остального
Код

...
curl_setopt($conn[$i], CURLOPT_URL, $url);
...


Вызов этой функции просто устанавливает параметр

Автор: lancelot555 27.4.2007, 14:18
но нужно же потом делать exec !
делал вот так
curl_setopt($conn[$i], CURLOPT_URL, $urlc);
curl_setopt($conn[$i], CURLOPT_HEADER, 0);
curl_multi_add_handle ($mh,$conn[$i]);
do { $n=curl_multi_exec($mh,$active); } while ($active);
$res[$i]=curl_multi_getcontent($conn[$i]);
$result = $res[$i];

работает, но это неправильно, сначала к примеру пройдет 10 потоков, потом в этом коде они выполняться еще раз
в общем у кого есть опыт в этом поделитесь плз  smile 

Автор: cia 27.4.2007, 14:53
Ничего не понял.
Что мешает сделать так:
Код

 curl_setopt($conn[$i], CURLOPT_URL, $url1);
 curl_exec($conn[$i]);
 curl_setopt($conn[$i], CURLOPT_URL, $url2);
 curl_exec($conn[$i]);

Автор: lancelot555 27.4.2007, 14:56
Цитата(cia @ 27.4.2007,  14:53)
Ничего не понял.
Что мешает сделать так:
Код

 curl_setopt($conn[$i], CURLOPT_URL, $url1);
 curl_exec($conn[$i]);
 curl_setopt($conn[$i], CURLOPT_URL, $url2);
 curl_exec($conn[$i]);

а будет ли это многопоточно??

Автор: WolfON 27.4.2007, 17:57
нет
ты хочешь, чтобы после завершения сразу создавались новые потоки?
по-моему курл-мульти не позволяет добавлять новые потоки в очередь

можно реализовать на уровне параллельного запуска нескольких скриптов

Добавлено через 3 минуты и 7 секунд
Вот:
http://ru2.php.net/manual/en/function.curl-multi-add-handle.php

Попробуй скомпилировать последнюю версию пхп из цсв - последней сборки. Или на свой страх и риск разбирайся с этой функцией

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)