Возникла проблема перебрать список 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);
?>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как узнать email человека который заходил на сайт? Когда-то заполнял форму и мой email уже был туда вписан автоматическиКак это сделать?
Не как не могу понять как использовать и зачем нужны ( ) в регуляркахМожет кто то подсказать и привести не большой пример