Whois情報を取得する方法
・$domainは「確認したいドメイン」、$serverはそのドメインの「Whoisサーバー」。
・「Whoisサーバー」については、whoisサーバ一覧を参照。
<?php require_once 'Net/Whois.php'; $whois = new Net_Whois; $data = $whois->query($domain, $server); echo nl2br($data); ?>
空きドメイン検索する方法
<?php
/**
* 初期化
*/
$title = 'Whois情報検索'; // ページタイトル
$top = ''; // 第1レベル・ドメイン
$second = ''; // 第2レベル・ドメイン
$error = ''; // エラーメッセージ
$match1 = ''; // 正規表現のチェック1
$match2 = ''; // 正規表現のチェック2
$match3 = ''; // 正規表現のチェック3
$match4 = ''; // 正規表現のチェック4
$whois = ''; // Net_Whoisクラスのオブジェクト
$data = ''; // Whois情報
$check = ''; // 空きドメインの可否を確認するための値
$res = ''; // 空きドメイン検索の結果
/**
* 関数
*/
//トップレベル・ドメインとWhoisサーバーの配列
function getWhoisServers ($top = null) {
$servers = array(
'.jp' => 'whois.jprs.jp',
'.com' => 'whois.verisign-grs.com',
'.net' => 'whois.verisign-grs.com',
'.org' => 'whois.publicinterestregistry.net',
'.info' => 'whois.afilias.info',
'.biz' => 'whois.neulevel.biz',
'.mobi' => 'whois.dotmobiregistry.net',
'.asia' => 'whois.nic.asia',
'.tv' => 'tvwhois.verisign-grs.com',
);
if (!empty($top) && in_array($top, array_keys($servers))) {
return $servers[$top];
} else {
return $servers;
}
}
//ドメイン等の値を整形する関数
function trimWhoisDomain ($val) {
$val = trim($val); //前後の半角スペースがある場合 削除
$val = str_replace(array('ー','ー', '_'),array('-','-', ''), $val); //長音記号がある場合ハイフンに置換、アンダースコアは削除
$val = mb_convert_kana($val,'a'); //全角英数字がある場合 半角に変換
$val = strtolower($val);
return $val;
}
//自動的に検出するエンコーディング
function getWhoisEncodings ($type) {
switch ($type) {
case 'string':
$encodings = 'ASCII, JIS, UTF-8, EUC-JP, SJIS, ISO-2022-JP';
break;
case 'array':
$encodings = array('UTF-8', 'JIS', 'EUC-JP', 'SJIS');
}
return $encodings;
}
/**
* 処理
*/
if (!empty($_POST)) {
// 整形して変数に格納。
list($second, $top) = array_map('trimWhoisDomain', array($_POST['second'], $_POST['top']));
// 正規表現で検証。
// $secondの値が半角英数字とハイフンとドットのみで構成された合計3~63文字の文字列(先頭と最後は半角英数字)で、かつ、ハイフンを連続して使用していない場合。
// (正規表現の中でグループ化をおこなった場合、マッチしていなくても空の配列が返されるので$match1[0]で結果を確認する。)
preg_match('/^[a-z0-9][a-z0-9-.]{1,61}[a-z0-9]$/i', $second, $match1);
preg_match('/\-{2,}/', $second, $match2);
preg_match('/\.{2,}/', $second, $match3);
preg_match('/^.[a-z]{2,4}$/i', $top, $match4);
// バリデーション。
// 第2レベル・ドメイン。
if (empty($second)) {
$error['second'] = '第2レベル・ドメインをテキストフィールドに入力してください。';
} elseif (empty($match1[0])) {
$error['second'] = '半角英数字と-(ハイフン)と.(ドット)のみを使用し、3〜63文字で入力してください。'.PHP_EOL.'-(ハイフン)や.(ドット)を、先頭や最後に使用することはできません。';
} elseif (!empty($match2[0])) {
$error['second'] = '-(ハイフン)を連続して使用することはできません。';
} elseif (!empty($match3[0])) {
$error['second'] = '.(ドット)を連続して使用することはできません。';
}
// 第1レベル・ドメイン
if (empty($top)) {
$error['top'] = '第1レベル・ドメインをプルダウンから選択してください';
} elseif (!in_array($top, array_keys(getWhoisServers())) || empty($match4[0])) {
$error['top'] = '第1レベル・ドメインは正しく入力してください。';
}
// バリデーションを通過した場合。
if (empty($error)) {
require_once 'Net/Whois.php';
$whois = new Net_Whois;
$data = $whois->query($second.$top, getWhoisServers($top)); // 第1引数に検索するドメイン, 第2引数にWhoisサーバーを渡し、Whois情報を取得。
$data = mb_convert_encoding($data, 'UTF-8', getWhoisEncodings('string')); // 文字コードを変換
// 空きドメインか否かの確認。
// Whois情報の中で確認する文字列
if (in_array($top, array('.jp', '.com', '.net', '.tv'))) {
$check = 'No\smatch';
} elseif (in_array($top, array('.org', '.info', '.mobi', '.asia'))) {
$check = 'NOT\sFOUND';
} elseif (in_array($top, array('.biz'))) {
$check = 'Not\sfound';
}
//空きドメイン検索の結果
if (preg_match('/'.$check.'/', $data)) {
$res = '[ '.$second.$top.'] 取得可能';
} else {
$res = '[ '.$second.$top.'] 取得不可';
}
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><?php echo $title ?></title>
</head>
<body>
<h1><?php echo $title ?></h1>
<form action="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'] ?>" method="post">
<?php echo !empty($error['second']) ? nl2br(htmlspecialchars($error['second']), ENT_QUOTES, 'UTF-8').'<br />' : null; ?>
<?php echo !empty($error['top']) ? nl2br(htmlspecialchars($error['top']), ENT_QUOTES, 'UTF-8').'<br />' : null; ?>
<input type="text" name="second" value="<?php echo !empty($second) ? htmlspecialchars($second, ENT_QUOTES, 'UTF-8') : null ?>" maxlength="60" />
<select name="top">
<option value="">選択してください</option>
<?php foreach(getWhoisServers() as $key => $value) { ?>
<option value="<?php echo htmlspecialchars($key, ENT_QUOTES, 'UTF-8') ?>" <?php if($top == $key){ ?> selected="selected" <?php } ?>>
<?php echo htmlspecialchars($key, ENT_QUOTES, 'UTF-8')?>
</option>
<?php } ?>
</select>
<input type="submit" value="Whois情報を調べる" />
</form>
<?php echo !empty($res) ? '<p><strong>'.nl2br(htmlspecialchars($res, ENT_QUOTES, 'UTF-8')).'<strong></p>' : null ?>
<?php echo !empty($data) ? nl2br(htmlspecialchars($data, ENT_QUOTES, 'UTF-8')) : null ?>
</body>
</html>