php - 如何使用 php 上的 whois 响应数据获取域过期日期?

标签 php

如何在 php 上使用 whois 响应数据获取域过期日期?

通常我使用 whois 响应来检查域可用性。

例如:检查 DRGDRGDRGRGDRG.COM,如果 whois 响应数据中有单词 No match for,则表示该域可用。

No match for domain "DRGDRGDRGRGDRG.COM".

但现在我想像这样使用 whois 响应数据检查域过期日期

Domain Name: GOOGLE.COM
Registrar: MARKMONITOR INC.
Sponsoring Registrar IANA ID: 292
Whois Server: whois.markmonitor.com
Referral URL: http://www.markmonitor.com
Name Server: NS1.GOOGLE.COM
Name Server: NS2.GOOGLE.COM
Name Server: NS3.GOOGLE.COM
Name Server: NS4.GOOGLE.COM
Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited 
Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited 
Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited 
Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited 
Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited 
Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited 
Updated Date: 20-jul-2011
Creation Date: 15-sep-1997
Expiration Date: 14-sep-2020

我该怎么做?谢谢

最佳答案

这不是解析响应字符串的简单问题,因为域名注册商提供的信息格式不同。

我想我们在这里有两个选择:

  1. 使用一些库,当它失败时解析字符串
  2. 自己做所有事情,不使用任何库并解析输出。

我建议从一些图书馆开始,但我真的不知道“完美”的图书馆。我要试试 phpWhois .如果失败,它会提供原始数据以尝试自行解析。

首先你需要安装这个库。我使用 Composer 执行此操作.下面是我的 composer.json 文件

{
  "require": {
    "phpwhois/phpwhois":"dev-master",
    "mso/idna-convert": "0.9.1"
  }
}

请注意,最新的 phpWhois 版本不适用于最新的 idna-convert 版本,这就是为什么我必须在我的要求中指定它。

执行 composer install 以下载库。

最后是查询域的 PHP 脚本:

<?php

require(__DIR__ . '/vendor/autoload.php');

use phpWhois\Whois;

$whois = new Whois();
$whois->deepWhois = true;

$query = isset($argv[1]) ? $argv[1] : 'google.com';
$result = $whois->lookup($query);

$registered = isset($result['regrinfo']['registered']) && $result['regrinfo']['registered'] == 'yes';
if (!$registered) {
    echo 'Domain: '.$query.' not registered.'.PHP_EOL;
} else {
    if (isset($result['regrinfo']['domain']['expires'])) {
        echo 'Domain: '.$query.PHP_EOL;
        echo 'Expired: '.$result['regrinfo']['domain']['expires'].PHP_EOL;
    } else {
        echo 'Domain: '.$query.PHP_EOL;
        echo 'Trying to find expires date...'.PHP_EOL;
        foreach ($result['rawdata'] as $raw) {
            if (strpos($raw, 'Expiry Date:') !== false) {
                echo 'Expired: '.trim(explode(':', $raw)[1]).PHP_EOL;
            }
        }
    }
}

它将域名作为第一个脚本参数$argv[1]

如果图书馆不解析来自注册商的结果,我们会尝试手动解析它。我添加了一个简单的检查

if (strpos($raw, 'Expiry Date:') !== false) {
    echo 'Expired: '.trim(explode(':', $raw)[1]).PHP_EOL;
}

您可以在原始响应数据中搜索“过期日期”,或者根据您在解析数据方面的经验做一些更好的逻辑。图书馆应该完美地做到这一点,但有时它会失败。

关于php - 如何使用 php 上的 whois 响应数据获取域过期日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36758407/

相关文章:

php - 我如何从父类的方法中动态更改对象的类?

javascript - JSTree - 禁用加载时自动选择子项

php - 如何在我的 wordpress 网站头部编辑不必要的 &lt;style&gt; 标签

php - HTML/PHP 表单问题

php - 对数组元素运行查询

php - 如果多个记录在一个 ID 上,如何获取单个记录?

php - 需要 INSERT ...SELECT 语句,但我还想手动设置一些字段

apache - 记录错误日志的URL

php - Laravel 5 用不同的值更新多行

php - 查询具有多个值的多个元键的 Wordpress 帖子