Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php上使用whois响应数据获取域过期日期?_Php - Fatal编程技术网

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

如何在php上使用whois响应数据获取域过期日期?,php,Php,如何在php上使用whois响应数据获取域过期日期 通常我使用whois响应来检查域可用性 例如:检查DRGDRGDRGRGDRG.COM如果whois响应数据中有word不匹配则表示此域可用 No match for domain "DRGDRGDRGRGDRG.COM". 但现在我想使用whois响应数据检查域过期日期,如下所示 Domain Name: GOOGLE.COM Registrar: MARKMONITOR INC. Sponsoring Registrar IANA ID:

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

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

例如:检查
DRGDRGDRGRGDRG.COM
如果whois响应数据中有word
不匹配
则表示此域可用

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

我该怎么做?谢谢

这不是一个解析响应字符串的简单问题,因为它可能在第一时间听起来很简单,因为域名注册商提供的信息格式不同

我想我们有两个选择:

  • 使用一些库,当它失败时解析字符串
  • 自己做所有事情,不要使用任何库和解析输出
  • 我建议从一些图书馆开始,但我真的不知道“完美”的图书馆。我要试试看。如果失败,它会提供原始数据,让我们自己尝试解析

    首先,您需要安装库。我用电脑做这个。下面是我的
    composer.json
    文件

    {
      "require": {
        "phpwhois/phpwhois":"dev-master",
        "mso/idna-convert": "0.9.1"
      }
    }
    
    请注意,最新的
    phphois
    版本不适用于最新的
    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;
                }
            }
        }
    }
    
    您可以在原始响应数据中搜索“过期日期”,或者根据解析数据的经验执行更好的逻辑(如果愿意)。图书馆完全应该这样做,但有时会失败

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