27.5. ホスト名の検証

Zend_Validate_Hostname は、ホスト名が仕様を満たしているかどうかの検証を行います。 三種類の形式のホスト名、つまりDNS ホスト名 (たとえば domain.com)、IP アドレス (たとえば 1.2.3.4) そしてローカルホスト名 (たとえば localhost) の検証が可能です。 デフォルトでは DNS ホスト名のみが有効となります。

基本的な使用法

基本的な使用法は、以下のようになります。

<?php
require_once 'Zend/Validate/Hostname.php';
$validator = new Zend_Validate_Hostname();
if ($validator->isValid($hostname)) {
    // ホスト名は正しい形式のようです
} else {
    // 不正な形式なので、理由を表示します
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

これは、ホスト名 $hostname を検証し、失敗した場合は その原因を表す便利なエラーメッセージを $validator->getMessages() で取得します。

さまざまな形式のホスト名の検証

IP アドレスやローカルホスト名、あるいはその両方を正しいホスト名として認めたいこともあるでしょう。 その場合は、Zend_Validate_Hostname のインスタンスを作成する際にパラメータを渡します。 このパラメータには、どの形式のホスト名を許可するのかを表す整数値を指定しなければなりません。 できるだけ、Zend_Validate_Hostname の定数を使用するようにしましょう。

Zend_Validate_Hostname の定数は次のとおりです。ALLOW_DNS は DNS ホスト名のみを許可し、 ALLOW_IP は IP アドレスを許可します。また ALLOW_LOCAL はローカルネットワーク名を許可し、ALLOW_ALL はこれら三種類をすべて許可します。 IP アドレスだけをチェックするには、以下の例のようにします。

<?php
require_once 'Zend/Validate/Hostname.php';
$validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_IP);
if ($validator->isValid($hostname)) {
    // ホスト名は正しい形式のようです
} else {
    // 不正な形式なので、理由を表示します
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

ALLOW_ALL を使用してすべての形式を許可するほかに、 これらの形式を組み合わせることもできます。 たとえば、DNS およびローカルホスト名を許可するには、 Zend_Validate_Hostname のインスタンスを次のように作成します。

<?php
$validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS | Zend_Validate_Hostname::ALLOW_IP);
}