Bars
Новичок
Взгляните на 63-ю строчку, там производится INSERT результата cURL в базу данных. Но почему-то при одинаковом количестве результатов (потоков), инсертится в базу всегда почему-то разное количество, то есть какие-то потоки теряются и INSERT внутри них не происходит
PHP:
<?
$mhs = array();
$keywords = array('0' => 'movers', '1' => 'moving companies');
$locs = array('0' => 'Los Angeles, CA', '1' => 'Los Angeles County, CA');
foreach ($keywords as $key_id => $key) {
$mhs[$key_id] = curl_multi_init();
foreach ($locs as $loc_id => $loc_name) {
$chm = curl_init();
curl_setopt($chm, CURLOPT_URL, 'http://url.ru');
curl_setopt($chm, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($chm, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($chm, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($chm, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chm, CURLOPT_HEADER, FALSE);
curl_setopt($chm, CURLOPT_USERAGENT, $useragents[rand(0, $uaCount-1)]);
curl_setopt($chm, CURLOPT_TIMEOUT, 12);
curl_multi_add_handle($mhs[$key_id], $chm);
}
$running = null;
while (($mrc = curl_multi_exec($mhs[$key_id], $running)) == CURLM_CALL_MULTI_PERFORM);
while ($running && $mrc == CURLM_OK) {
if ($running and curl_multi_select($mhs[$key_id]) != - 1) {
do {
$mrc = curl_multi_exec($mhs[$key_id], $running);
// Если поток завершился
if ($info = curl_multi_info_read($mhs[$key_id]) and $info['msg'] == CURLMSG_DONE) {
$ch1 = $info['handle'];
if ($info['result'] > 0) {
// Произошла ошибка
} else {
// Ответ получен
$data = curl_multi_getcontent($info['handle']).'';
$data = str_get_html($data);
$h1 = $data->find('h1');
if (strlen($data) > 10 || count($h1) > 0) {
// То что должно произойти, но происходит не всегда
$stmt2 = $db->prepare("INSERT INTO $table (`pid`, `key`, `loc`, `day`, `pos`, `dif`) VALUES (:pid, :key, :loc, $cday, :pos, :dif)");
// ...
}
}
curl_multi_remove_handle($mhs[$key_id], $ch1);
curl_close($ch1);
unset($ch1);
}
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
usleep(100);
}
//curl_multi_close($mhs[$key_id]);
}
foreach ($mhs as $keey => $value) curl_multi_close($mhs[$keey]);
?>
Последнее редактирование: