private static function rolling_curl($urls, $proxy = '')
{
$queue = curl_multi_init();
$map = $responses = array();
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if ($proxy) {
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, self::USER_AGENT);
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
curl_multi_add_handle($queue, $ch);
$map[(string) $ch] = $url;
}
do {
while (($code = curl_multi_exec($queue, $active)) == CURLM_CALL_MULTI_PERFORM) {
}
if ($code != CURLM_OK) {
break;
}
while ($done = curl_multi_info_read($queue)) {
$data = curl_multi_getcontent($done['handle']);
preg_match('#"l":"([^"]+)&src=.*?"#i', $data, $matchs);
$results = $matchs ? $matchs[1] : '';
$responses[$map[(string) $done['handle']]] = $results;
curl_multi_remove_handle($queue, $done['handle']);
curl_close($done['handle']);
}
if ($active > 0) {
curl_multi_select($queue, 0.5);
}
} while ($active);
curl_multi_close($queue);
return $responses;
}