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 教則に関心のある友人の助けになることを望みます。