Пример того, как curl может работать в многопоточном режиме.
Такое может потребоваться, например для парсинга множества страниц.
$mh = curl_multi_init();
$ch = curl_init();
$ch1 = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.ru");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh,$ch);
curl_setopt($ch1, CURLOPT_URL, "http://oddler.ru");
curl_setopt ($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch1, CURLOPT_TIMEOUT, 10);
curl_setopt ($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh,$ch1);
$running=null;
//просто запускаем все соединени
while( ($mrc = curl_multi_exec($mh, $running))==CURLM_CALL_MULTI_PERFORM );
while($running && $mrc == CURLM_OK){
if($running and curl_multi_select($mh)!=-1 ){
do{
$mrc = curl_multi_exec($mh, $running);
// если поток завершился
if( $info=curl_multi_info_read($mh) and $info['msg'] == CURLMSG_DONE ){
$ch = $info['handle'];
// смотрим http код который он вернул
$status=curl_getinfo($ch,CURLINFO_HTTP_CODE);
// и собственно что он вернул
$data=curl_multi_getcontent($info['handle']);
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
}while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
usleep(100);
}