Вот код для асинхронных запросов к страницам по курлу почти из официальной документации:
$urls = array('');
$chm = curl_multi_init();
$tasks = array();
foreach ($urls as $url) {
$ch = curl_init('http://' . $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$tasks[$url] = $ch;
curl_multi_add_handle($chm, $ch);
}
$active = null;
do {
$mrc = curl_multi_exec($chm, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && ($mrc == CURLM_OK)) {
if (curl_multi_select($chm) != -1) {
do {
$info = curl_multi_info_read($chm);
if ($info['msg'] == CURLMSG_DONE) {
$ch = $info['handle'];
$url = array_search($ch, $tasks);
$tasks[$url] = array(
'http_code' => curl_getinfo($ch, CURLINFO_HTTP_CODE),
'content' => curl_multi_getcontent($ch));
curl_multi_remove_handle($chm, $ch);
curl_close($ch);
}
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
$mrc = curl_multi_exec($chm, $active);
}
curl_multi_close($chm);
Он работает отлично, но есть одна вещь, над которой я бьюсь уже несколько часов. В данном случае получается лишь отлавливать успешно завершенные операции, но не ошибки связанные с опечатками в url. Как ловить эти ошибки?