Добрый день! Есть код:
function http_load( $urls, $callback = false ) {
$mh = curl_multi_init();
$chs = array();
foreach ( $urls as $url ) {
$chs[] = ( $ch = curl_init() );
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
curl_setopt( $ch, CURLOPT_USERAGENT, $useragent);
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_HTTPGET, 1);
curl_setopt( $ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
curl_setopt( $ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false );
curl_setopt( $ch, CURLOPT_DNS_CACHE_TIMEOUT, 2 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_multi_add_handle( $mh, $ch );
}
$results = array();
$prev_running = $running = null;
do {
curl_multi_exec( $mh, $running );
if ( $running != $prev_running ) {
$info = curl_multi_info_read( $mh );
if ( is_array( $info ) && ( $ch = $info['handle'] ) ) {
$content = curl_multi_getcontent( $ch );
$url = curl_getinfo( $ch, CURLINFO_EFFECTIVE_URL );
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$o = curl_getinfo($ch);
if( $httpCode == 200 ) {
$item = str_get_html( $content );
... код парсера
$results[] = array( 'url' => $url, 'description' => $description, 'attr' => $attr, 'vendor_id' => $vendor_id );
}elseif( !empty( curl_error( $ch ) ) ){
$error[] = array( 'url' => $url, 'error' => curl_error( $ch ) );
}else{
$error[] = array( 'url' => $url, 'error' => curl_error( $ch ) );
}
}
$prev_running = $running;
}
} while ( $running > 0 );
foreach ( $chs as $ch ) {
curl_multi_remove_handle( $mh, $ch );
curl_close( $ch );
}
curl_multi_close( $mh );
if( empty( $results ) ) $results = '';
if( empty( $error ) ) $error = '';
return array( 'success' => $results, 'error' => $error );
}
Не пойму переписывла 10 раз уже, пробовал задержки, слип ставить.
В итоге при тесте
Имеем 20 ссылок в массиве $urls
В $result попадают разное колличество всегда от 9 до 20.
Не понятно, куда пропадают остальные, в $error 0 или 1 всегда.
Как отследить и заставить правильно работать скрипт?