Возникла проблема перебрать список 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);
?>
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости