Итак ...
Я уже давно возился с этим, разыскивая потенциальные узкие места, и через несколько дней назад и вперед я обнаружил, что на самом деле это CURL (который ждетчтобы отдельные серверы отвечали HTTP-кодом), что делает процесс медленнее, чем нужно.
В конце я выбрал другую функцию "gethostbyname", которая учитывает IP6 длярешить мою проблему (и) .
function my_gethostbyname($host, $try_a = FALSE)
{
$dns = gethostbynamel6($host, $try_a);
if ($dns == FALSE)
{
return FALSE;
}
else
{
return $dns[0];
}
}
function gethostbynamel6($host, $try_a = FALSE)
{
$dns = array();
$dns6 = @dns_get_record($host, DNS_AAAA);
if($dns6!== FALSE)
{
$dns = array_merge($dns, $dns6);
}
if ($try_a == TRUE)
{
$dns4 = @dns_get_record($host, DNS_A);
if($dns4!== FALSE)
{
$dns = array_merge($dns, $dns4);
}
}
else
{
$dns = $dns6;
}
$ip6 = array();
$ip4 = array();
foreach ($dns as $record)
{
if ($record["type"] == "A")
{
$ip4[] = $record["ip"];
}
if ($record["type"] == "AAAA")
{
$ip6[] = $record["ipv6"];
}
}
if (count($ip6) < 1)
{
if ($try_a == TRUE)
{
if (count($ip4) < 1)
{
return FALSE;
}
else
{
return $ip4;
}
}
else
{
return FALSE;
}
}
else
{
return $ip6;
}
}
Как только первая часть домена фактически преобразуется в IP, (a) домен существует и (b) является корневым доменом.
Это избавляет меня от основного времени, и хитрость в том, что вы работаете так же медленно, как ваше разрешение DNS и некоторые микросеки.Опция curl, которую я использовал раньше, занимала около 3 секунд на вызов (иногда вплоть до полного интервала ожидания, который я установил до 20 секунд), в зависимости от времени отклика целевого сервера - если оно есть.это легко понять: я получаю список разрешающих доменов и - при необходимости - могу проверить те, которые используют curl «по требованию» или одно или несколько заданий CRON «с интервалом».
Я знаю, чтоэто своего рода обходной путь, но разделение проблемы на две задачи (1 = предварительная проверка корневого домена, 2 = проверка, возвращает ли домен ожидаемый HTTP-код) делает все это быстрее, чем попытка выполнить всю работу сразу, используя curl.
Из того, что я узнал из этого ...
- При проверке доменов сначала попытайтесь разрешить их, чтобы вы могли сэкономить время, которое наступает при превышении времени ожидания.с curl.
- Curl отлично подходит для многих задач, но это не самый умный способ попытаться сделать с ним все .
- Когда вы думаете, что не можете решитьпроблемам, чем вы пытались сделать, разбейте проблему на две или более частей и проверьте снова.Скорее всего, вы откроете для себя целый новый мир возможностей для улучшения того, что у вас есть.
Я надеюсь, что это избавит кого-то от бремени, связанного с похожей проблемой в течение нескольких недель.;)