ホームページ  >  記事  >  バックエンド開発  >  PHPのWHOISクラス(修正版)

PHPのWHOISクラス(修正版)

WBOY
WBOYオリジナル
2016-08-08 09:34:041113ブラウズ

1. コードを簡略化しました。 (実際には、いくつかの不要な変数の定義が削除されるだけです)
2. INTERNIC から取得した情報は単純すぎるため、INTERNIC からフィードバックされた情報内の WHOIS SERVER に基づいてさらにクエリを実行します。たとえば、YAHOO には、whois.networksolutions.com に詳細な情報があります。

クラス Whois {

var $use_cache = 1; var $FROM_CACHE=0; var $cache_dir = "./" // システムに応じて設定します
;
var $ポート = 43; var $MAXLEN = 100;
// 接続失敗後に自動的に再試行したい場合は、
//再試行回数を設定 $MAX_RETRIES
var $MAX_RETRIES = 0; var $SLEEP_VAL = 1; var $RETRY = 0;
var $FOUND = 0; // クエリには結果がなく、2 番目の値は 0 です
var $ERROR = 0 // クエリ中のエラー数
; var $DATA_MIN = 8 // 少なくとも 8 バイトのデータを取得する必要があります
; var $DATA_COUNT = 0;
var $WHOIS_SERVER
変数 $NEW_WHOIS
var $FURTHER_INFO = 0;

// WHOIS SERVER との SOCKET 接続を開きます
// デフォルトは whois.internic.net です
関数接続 ($server) {
$this->再試行=0; while($this->RETRY <= $this->MAX_RETRIES):
$ptr = fsockopen($server, $this->port); if($ptr>0):
$this->ERROR=0; // 念のため再試行中です
リターン($ptr); その他:
$this->エラー++; $this->再試行
スリープ($this->SLEEP_VAL); エンディフ
ついでに
}

// 単純なクエリ結果を取得し、行単位で配列に入れます
// 国際ドメイン名のクエリ
関数 rawlookup ($query, $server) {

if(!$クエリ):
リターン( ""); エンディフ

$ptr=$this->接続($サーバー);
if($ptr):
if(!ereg($query, "n$")):
$クエリ .= "n"; エンディフ
fputs($ptr, "$query"); $i=0; $this->FOUND=1; while(!feof($ptr)):
$array[$i]=fgets($ptr,$this->MAXLEN); $this->DATA_COUNT+=strlen(chop($array[$i])); if(eregi( "一致しません", $array[$i]) || eregi ("エントリが見つかりません", $array[$i])):
$this->FOUND=0; elseif(eregi( "WHOIS データベースがダウンしています",$array[$i])):
$this->エラー++; $this->FOUND=0; elseif(eregi( "しばらく待ってからもう一度お試しください",$array[$i])):
$this->エラー++; $this->FOUND=0; 休憩
エンディフ
if(eregi("Whois サーバー:",$array[$i])):
$this->NEW_WHOIS=trim(substr(trim($array[$i]),(strlen(trim($array[$i]))-13)*(-1))); $this->FURTHER_INFO=1; エンディフ
$i++; ついでに

fclose($ptr);
if($this->DATA_COUNT>$this->DATA_MIN):
戻り値($配列); その他:
$this->エラー++; エンディフ
その他:
$this->エラー++; エンディフ
}


// 国内ドメイン名のクエリ
関数 cnrawlookup ($query, $server) {
if(!$クエリ):
リターン( ""); エンディフ

$ptr=$this->接続($サーバー); if($ptr):
if(!ereg($query, "n$")):
$クエリ .= "n"; エンディフ
fputs($ptr, "$query"); $i=0; $this->FOUND=1; while(!feof($ptr)):
$array[$i]=fgets($ptr,$this->MAXLEN); $this->DATA_COUNT+=strlen(chop($array[$i])); if(eregi( "一致しません", $array[$i]) || eregi ("エントリが見つかりません", $array[$i])):
$this->FOUND=0; elseif(eregi( "WHOIS データベースがダウンしています",$array[$i])):
$this->エラー++; $this->FOUND=0; elseif(eregi( "しばらく待ってからもう一度試してください",$array[$i])):
$this->エラー++; $this->FOUND=0; 休憩
エンディフ
$i++; ついでに
fclose($ptr);
if($this->DATA_COUNT>$this->DATA_MIN):
戻り値($配列); その他:
$this->エラー++;  
エンドイフ;  
その他:
$this->エラー++;  
エンドイフ;  
}
};



$myWHOIS=新しいwhois();

$thisname=$サーバー名.$ドメイン名;
// 国内ドメイン名または国际ドメイン名选择 WHOIS SERVER に基づく
if (ereg(".cn$",$thisname))
{
$myWHOIS->WHOIS_SERVER="whois.cnnic.net.cn";
$array=$myWHOIS->cnrawlookup($thisname,$myWHOIS->WHOIS_SERVER);
}
それ以外は
{
$myWHOIS->WHOIS_SERVER="whois.internic.net";
//$myWHOIS->WHOIS_SERVER="whois.networksolutions.com";
$array=$myWHOIS->rawlookup($thisname,$myWHOIS->WHOIS_SERVER);
}



エコー「
」 「.$この名前。」
";
エコー "";
$x=0;
while ($x {
エコー「 $x 」;
エコー " $array[$x] ";
$x++;
}
エコー「
";

if (!ereg(".cn$",$thisname))
{
エコー「
」 さらに詳しい情報
";
$array_further=$myWHOIS->rawlookup($thisname,$myWHOIS->NEW_WHOIS);

エコー "";
$x=0;
while ($x {
エコー「 $x 」;
echo " $array_further[$x] ";
$x++;
}
エコー「
";
}

?>   

以上は、php 内の WHOIS タイプ (修正版) であり、WHOIS タイプに関する内容が含まれており、PHP 教則に関心のある友人の助けになることを望みます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。