Проблемы многопоточности у CURL

203
18 декабря 2017, 15:10

Возникла проблема перебрать список URL для проверки их валидности. Набросал код для начала, который просто генерирует все возможные вариации и проверяет их. Каждый проверить с помощью простого CURL запроса крайне долго. Решил использовать многопоточность, но никак не пойму почему код не хочет работать? Постоянно ошибки, что код выполняется больше 30 отведенных секунд, хотя теоритически он должен быть быстрее, ведь ту же базу обычный CURL обрабатывает меньше чем за 30 секунд. Сам код:

<?php
$alphabet = 'abcdefghijklmnopqrstuvwxyz';
$length = 1;
$urls = array();
function makeword($prefix)
{
  global $alphabet, $length, $urls;
  if (strlen($prefix) == $length)
  {
    $urls[] = "www.".$prefix.".com";
    return;
  }
  for ($i = 0; $i < strlen($alphabet); $i++)
    makeword($prefix . $alphabet{$i});
}
makeword('');
$cmh = curl_multi_init();
$tasks = array();
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_NOBODY, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $tasks[$url] = $ch;
    curl_multi_add_handle($cmh, $ch);
}
$active = null;
do {
    $mrc = curl_multi_exec($cmh, $active);
} 
while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && ($mrc == CURLM_OK)) {
    if (curl_multi_select($cmh) != -1) {
        do {
            $mrc = curl_multi_exec($cmh, $active);
            $info = curl_multi_info_read($cmh);
            if ($info['msg'] == CURLMSG_DONE) {
                $ch = $info['handle'];
                $url = array_search($ch, $tasks);
                $tasks[$url] = curl_multi_getcontent($ch);
                curl_multi_remove_handle($cmh, $ch);
                curl_close($ch);
            }
        }
        while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}
curl_multi_close($cmh);
print_r($tasks);
?>
READ ALSO
Как узнать email человека который заходил на сайт?

Как узнать email человека который заходил на сайт?

Как узнать email человека который заходил на сайт? Когда-то заполнял форму и мой email уже был туда вписан автоматическиКак это сделать?

495
Зачем нужны ( ) в RegEx?

Зачем нужны ( ) в RegEx?

Не как не могу понять как использовать и зачем нужны ( ) в регуляркахМожет кто то подсказать и привести не большой пример

173
php файл как динамический js

php файл как динамический js

Можно ли делать так, если нет других вариантов

287