Сочетание curl multi и strpos () для поиска текста на веб-странице

РЕДАКТИРОВАНИЕ

Я пытаюсь использовать curl multi, чтобы проверить ответ от веб-сайта и дополнительно проверить каждый ответ curl на наличие части текста. Я сгруппировал данные в массив, но не могу понять, использую ли я правильный / наиболее эффективный метод для запуска функции strpos () с использованием текста ‘post’.

$data = array(array());

$data[0]['url']  = 'http://www.google.com';
$data[0]['post'] = 'google text';

$data[1]['url']  = 'http://www.yahoo.com';
$data[1]['post'] = 'yahoo text';

$r = multiRequest($data);

echo '<pre>';
print_r($r);

Вот моя функция:

function multiRequest($data, $options = array()) {

// array of curl handles
$curly = array();

// data to be returned
$result = array();

// multi handle
$mh = curl_multi_init();

// loop through $data and create curl handles
// then add them to the multi-handle
foreach ($data as $id => $d) {

$curly[$id] = curl_init();

$url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
curl_setopt($curly[$id], CURLOPT_URL,            $url);
curl_setopt($curly[$id], CURLOPT_HEADER,         0);
curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curly[$id], CURLOPT_USERAGENT,      'Chrome: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2');

// extra options?
if (!empty($options)) {
curl_setopt_array($curly[$id], $options);
}

curl_multi_add_handle($mh, $curly[$id]);
}

// execute the handles
$running = null;
do {
curl_multi_exec($mh, $running);
} while($running > 0);

// get content and remove handles
foreach($curly as $id => $c) {
$result[$id][] = curl_getinfo($c, CURLINFO_EFFECTIVE_URL);
$result[$id][] = curl_getinfo($c, CURLINFO_HTTP_CODE);
$result[$id][] = curl_getinfo($c, CURLINFO_CONTENT_TYPE);
$url = curl_getinfo($c, CURLINFO_EFFECTIVE_URL);
// loop data again
foreach ($data as $id => $d){
if($url==$d['url']){ // only check current url data
$text = curl_exec($c);
$result[$id][] = strpos($text, $d['post']);
}
}
curl_multi_remove_handle($mh, $c);
}

// all done
curl_multi_close($mh);

return $result;
}

Кто-нибудь может посоветовать, подходит ли мое решение? Есть ли более эффективный / лучший способ выполнить мою проверку strpos ()?

Спасибо

1

Решение

Используйте массив, чтобы вы могли связать все URL, строки и ручки curl вместе:

$stuff = array(
0 => array('url' => 'google', 'text' => 'googletext', 'curl' => null)
1 => array('url' => 'yahoo', 'text' => 'yahootext', 'curl' => null)
etc..
);

foreach($stuff as $key => $info) {
$stuff[$key]['curl'] =  curl_init($stuff[$key]['url']);
curl_multi_add_handle($mh, $stuff[$key]['curl']);
}

Затем выполните аналогичный цикл при обработке результатов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]