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