PHP Classes

File: bin/php-whois.php

Recommend this page to a friend!
  Classes of Fatih Yard?mc?   PHP Whois   bin/php-whois.php   Download  
File: bin/php-whois.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP Whois
Query about domains accessing a Whois server
Author: By
Last change:
Date: 15 days ago
Size: 4,262 bytes
 

Contents

Class file image Download
<?php

declare(strict_types=1);

use
Iodev\Whois\Factory;

$scriptDir = '.';
if (
preg_match('~^(.+?)/[^/]+$~ui', $_SERVER['SCRIPT_FILENAME'], $m)) {
   
$scriptDir = $m[1];
}
include
"$scriptDir/../vendor/autoload.php";

function
main($argv)
{
   
$action = trim($argv[1] ?? '');
   
$args = array_slice($argv, 2);

    if (empty(
$action)) {
       
$action = 'help';
    }
    switch (
mb_strtolower(ltrim($action, '-'))) {
        case
'help':
        case
'h':
           
help();
            return;
    }
    switch (
$action) {
        case
'lookup':
           
lookup($args[0]);
            break;

        case
'info':
           
$opts = parseOpts(implode(' ', array_slice($args, 1)));
           
info($args[0], $opts);
            break;

        default:
            echo
"Unknown action: {$action}\n";
            exit(
1);
    }
}

function
parseOpts(string $str): array
{
   
$result = [];
   
$rest = trim($str);
    while (
preg_match('~--([-_a-z\d]+)(\s+|=)(\'([^\']+)\'|[^-\s]+)~ui', $rest, $m, PREG_OFFSET_CAPTURE)) {
       
$result[$m[1][0]] = $m[4][0] ?? $m[3][0];
       
$rest = trim(mb_substr($rest, $m[0][1] + mb_strlen($m[0][0])));
    }
    return
$result;
}

function
help()
{
    echo
implode("\n", [
       
'Welcome to php-whois CLI',
       
'',
       
' Syntax:',
       
' php-whois {action} [arg1 arg2 ... argN]',
       
' php-whois help|--help|-h',
       
' php-whois lookup {domain}',
       
' php-whois info {domain} [--parser {type}] [--host {whois}]',
       
'',
       
' Examples',
       
' php-whois lookup google.com',
       
' php-whois info google.com',
       
' php-whois info google.com --parser block',
       
' php-whois info ya.ru --host whois.nic.ru --parser auto',
       
'',
       
'',
    ]);
}

function
lookup(string $domain)
{
    echo
implode("\n", [
       
' action: lookup',
       
" domain: '{$domain}'",
       
'',
       
'',
    ]);

   
$whois = Factory::get()->createWhois();
   
$result = $whois->lookupDomain($domain);

   
var_dump($result);
}

function
info(string $domain, array $options = [])
{
   
$options = array_replace([
       
'host' => null,
       
'parser' => null,
       
'file' => null,
    ],
$options);

    echo
implode("\n", [
       
' action: info',
       
" domain: '{$domain}'",
       
sprintf(" options: %s", json_encode($options, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)),
       
'',
       
'',
    ]);

   
$loader = null;
    if (
$options['file']) {
       
$loader = new \Iodev\Whois\Loaders\FakeSocketLoader();
       
$loader->text = file_get_contents($options['file']);
    }

   
$tld = Factory::get()->createWhois($loader)->getTldModule();
   
$servers = $tld->matchServers($domain);

    if (!empty(
$options['host'])) {
       
$host = $options['host'];
       
$filteredServers = array_filter($servers, function (\Iodev\Whois\Modules\Tld\TldServer $server) use ($host) {
            return
$server->getHost() == $host;
        });
        if (
count($filteredServers) == 0 && count($servers) > 0) {
           
$filteredServers = [$servers[0]];
        }
       
$servers = array_map(function (\Iodev\Whois\Modules\Tld\TldServer $server) use ($host) {
            return new \
Iodev\Whois\Modules\Tld\TldServer(
               
$server->getZone(),
               
$host,
               
$server->isCentralized(),
               
$server->getParser(),
               
$server->getQueryFormat()
            );
        },
$filteredServers);
    }

    if (!empty(
$options['parser'])) {
        try {
           
$parser = Factory::get()->createTldParser($options['parser']);
        } catch (\
Throwable $e) {
            echo
"\nCannot create TLD parser with type '{$options['parser']}'\n\n";
            throw
$e;
        }
       
$servers = array_map(function (\Iodev\Whois\Modules\Tld\TldServer $server) use ($parser) {
            return new \
Iodev\Whois\Modules\Tld\TldServer(
               
$server->getZone(),
               
$server->getHost(),
               
$server->isCentralized(),
               
$parser,
               
$server->getQueryFormat()
            );
        },
$servers);
    }

    [,
$info] = $tld->loadDomainData($domain, $servers);

   
var_dump($info);
}

main($argv);