Использование PHP для получения данных whois?

Я перебираю строки в моей базе данных, чтобы получить информацию из результатов Whois.

Вот что у меня сейчас:

function GetEmailFromWhois($domain){
$whois = new Whois();
$query = $domain;
$whois->deep_whois=TRUE;
$result = $whois->Lookup($query, false);
$raw_data = $result["rawdata"];

$email = "";

foreach($raw_data as $item){
$items = explode(":",$item);
if($items[0] == "Registrant Email"){
$email = $items[1];
}
}
return $email;
}

Код выше получает Registrant Email из результатов Whois.

Я ссылаюсь на это позже в моем коде так: $email = GetEmailFromWhois($domain);

Тем не менее, в то же время, как получение электронной почты владельца регистрации, я также хотел бы получить Registrant Name, Registrant Phone, а также Registrant Country,

Я мог бы просто скопировать приведенный выше код еще 3 раза для каждого из этих дополнительных полей, но это привело бы к тому, что для каждого домена было бы 4 запроса whois — вместо одного.

Кто-нибудь знает, как я могу получить нужную мне информацию в одном запросе, а затем использовать ее позже в своем коде?

2

Решение

Как я недавно отметил в другом ответе, Парсинг данных WHOIS — сложное, грязное дело. Точный формат ответов WHOIS не указан ни в одном стандарте, и не все реестры / регистраторы будут использовать формат, который вы пытаетесь проанализировать здесь. (Некоторые используют разные метки для пометки полей, которые вы ищете, некоторые используют метки, которые являются неоднозначными без контекста, некоторые вообще не помечают определенные поля, а некоторые даже не включают информацию, которую вы ищете здесь. ) Хуже того, некоторые реестры / регистраторы будут сильно ограничивать вас, если станет очевидно, что вы пытаетесь извлечь из них более нескольких ответов. Короче говоря, я бы рекомендовал вам не пытаться анализировать ответы WHOIS, если это вообще возможно.

Чтобы решить ваш немедленный Проблема, однако, вы можете создать ассоциативный массив для представления ответа WHOIS следующим образом:

$arr = [];
foreach($raw_data as $item) {
list($k, $v) = explode(":", $item);
$arr[$k] = $v;
}

Это даст вам ассоциативный массив результатов, чтобы вы могли извлекать отдельные значения, используя, например,

$email = $arr["Registrant Email"];
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]