使用PHP获取whois数据?

时间:2016-01-02 23:26:25

标签: 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;
}

上面的代码从whois结果中获取Registrant Email

我稍后会在我的代码中引用它:$email = GetEmailFromWhois($domain);

但是,在收到注册人电子邮件的同时,我还希望获得Registrant NameRegistrant PhoneRegistrant Country

我可以为每个其他字段再复制3次以上的代码,但这会导致每个域有4个whois查询 - 而不是只有一个。

任何人都知道如何在单个查询中获取我需要的信息,然后在我的代码中使用它?

1 个答案:

答案 0 :(得分:2)

正如我最近在另一个答案中提到的,parsing WHOIS data is a complex, messy affair。任何标准都没有规定WHOIS响应的确切格式,并非所有注册管理机构/注册服务商都会使用您在此处尝试解析的格式。 (有些使用不同的标签来标记您要搜索的字段,有些使用不带上下文的模糊标签,有些标签根本不标记某些字段,有些甚至不包含您在此处搜索的信息。 )更糟糕的是,一些注册管理机构/注册服务商会严重限制您,如果您显然尝试从中提取多个响应。简而言之,我建议您尽可能避免尝试解析WHOIS回复。

要解决立即问题,您可以创建一个关联数组来表示WHOIS响应,如下所示:

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

这将为您提供结果的关联数组,因此您可以使用例如

来提取单个值
$email = $arr["Registrant Email"];