Intereting Posts
Magento – атрибут товара / заказа товара / товара на основе ввода пользователем Шифрование пользовательских данных для автоматического входа в систему сторонних производителей Как правильно деактивировать данные, полученные из текстовой области, при ее возврате в текстовую область? PHP array_multisort не сортирует мой многомерный массив, как ожидалось XMPPHP to Openfire Как добавить элементы в DOMNodeList в PHP? Laravel4 POST необъяснимое перенаправление на GET Таймер для онлайн-экзаменационной системы для хранения времени для каждого отдельного раздела Диалоговое окно Codeigniter, показывающее повторяющиеся записи с строкой запроса страницы Уведомление Apple Push: отправка больших объемов сообщений Мне нужен совет, разрабатывающий чувствительную систему передачи / хранения / шифрования данных Вызов Perl-скрипта из PHP и передача в переменных, а также использование имени переменной perl-скрипта Код ошибки загрузки файла php 3 разбиение большого массива на меньшие массивы на основе имен ключей javascript – класс обновления на основе URL

php – Самый быстрый способ проверить наличие текста во многих доменах (более 1000)

У меня запущен скрипт php и с помощью cURL вы можете получить содержимое веб-страниц, на которых я хочу проверить наличие какого-либо текста.

Сейчас это выглядит так:

for( $i = 0; $i < $num_target; $i++ ) { $ch = curl_init(); $timeout = 10; curl_setopt ($ch, CURLOPT_URL,$target[$i]); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ch, CURLOPT_FORBID_REUSE, true); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $url = curl_exec ($ch); curl_close($ch); if (preg_match($text,$url,$match)) { $match[$i] = $match; echo "text" . $text . " found in URL: " . $url . ": " . $match .; } else { $match[$i] = $match; echo "text" . $text . " not found in URL: " . $url . ": no match"; } } 

Мне было интересно, могу ли я использовать специальную настройку cURL, которая делает ее быстрее (я смотрел в руководстве по php, выбрал варианты, которые казались мне лучше, но я, возможно, пренебрег некоторыми, что может увеличить скорость и производительность скрипта).

Тогда мне стало интересно, может ли использование cgi, Perl или python (или другого решения) быть быстрее php.

Заранее благодарю за любую помощь / совет / предложение.

Вы можете использовать curl_multi_init …. который позволяет обрабатывать несколько ручек cURL параллельно.

пример

 $url = array(); $url[] = 'http://www.huffingtonpost.com'; $url[] = 'http://www.yahoo.com'; $url[] = 'http://www.google.com'; $url[] = 'http://technet.microsoft.com/en-us/'; $start = microtime(true); echo "<pre>"; print_r(checkLinks($url, "Azure")); echo "<h1>", microtime(true) - $start, "</h1>"; 

Вывод

 Array ( [0] => http://technet.microsoft.com/en-us/ ) 1.2735739707947 <-- Faster 

Используемая функция

 function checkLinks($nodes, $text) { $mh = curl_multi_init(); $curl_array = array(); foreach ( $nodes as $i => $url ) { $curl_array[$i] = curl_init($url); curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true); curl_setopt($curl_array[$i], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)'); curl_setopt($curl_array[$i], CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($curl_array[$i], CURLOPT_TIMEOUT, 15); curl_multi_add_handle($mh, $curl_array[$i]); } $running = NULL; do { usleep(10000); curl_multi_exec($mh, $running); } while ( $running > 0 ); $res = array(); foreach ( $nodes as $i => $url ) { $curlErrorCode = curl_errno($curl_array[$i]); if ($curlErrorCode === 0) { $info = curl_getinfo($curl_array[$i]); if ($info['http_code'] == 200) { if (stripos(curl_multi_getcontent($curl_array[$i]), $text) !== false) { $res[] = $info['url']; } } } curl_multi_remove_handle($mh, $curl_array[$i]); curl_close($curl_array[$i]); } curl_multi_close($mh); return $res; }