ホスト名Zend_Validate_Hostname は、ホスト名が仕様を満たしているかどうかの検証を行います。
三種類の形式のホスト名、つまり DNS ホスト名
(たとえば domain.com)、IP アドレス (たとえば 1.2.3.4)
そしてローカルホスト名 (たとえば localhost) の検証が可能です。
デフォルトでは DNS ホスト名のみが有効となります。
Supported options for Zend_Validate_Hostname
The following options are supported for Zend_Validate_Hostname:
allow: Defines the sort of hostname
which is allowed to be used. See Hostname types for
details.
idn: Defines if IDN
domains are allowed or not. This option defaults to TRUE.
ip: Allows to define a own IP
validator. This option defaults to a new instance of
Zend_Validate_Ip.
tld: Defines if
TLDs are validated. This option defaults to
TRUE.
基本的な使用法
基本的な使用法は、以下のようになります。
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 は前述の三種類をすべて許可します。
Additionally there is ALLOW_URI which allows to check hostnames
according to RFC3986. These
are registered names which are used by WINS, NetInfo and also local
hostnames like those defined within your .hosts file. For security
reasons ALLOW_URI is not contained within
ALLOW_ALL.
IP アドレスだけをチェックするには、以下の例のようにします。
isValid($hostname)) {
// ホスト名は正しい形式のようです
} else {
// 不正な形式なので、理由を表示します
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
]]>ALLOW_ALL を使用して共通のすべてのホスト名形式を許可するほかに、
これらの形式を組み合わせることもできます。
たとえば、 DNS およびローカルホスト名を許可するには、
Zend_Validate_Hostname のインスタンスを次のように作成します。
国際化ドメイン名を検証
国別コードトップレベルドメイン (Country Code Top Level Domains: ccTLDs)
の一部、たとえば 'de' (ドイツ) などでは、ドメイン名の中に国際化文字の使用をサポートしています。
これは、国際化ドメイン名 (International Domain Names: IDN) といわれるものです。
これらのドメインについても、Zend_Validate_Hostname
の検証プロセスで使用する文字を拡張することで検証できます。
IDN ドメイン
これまでに、50以上の ccTLD が IDN ドメインをサポートします。
IDN ドメインに対するマッチングを行う方法は、通常のホスト名の場合とまったく同じです。
というのも、 IDN のマッチングはデフォルトで有効になっているからです。
IDN の検証を無効にしたい場合は、Zend_Validate_Hostname
のコンストラクタにパラメータを渡すか、あるいは
setValidateIdn() メソッドを使用します。
IDN の検証を無効にするには、Zend_Validate_Hostname
のコンストラクタに二番目のパラメータを次のように渡します。
Zend_Validate_Hostname::ALLOW_DNS,
'idn' => false
)
);
]]>
あるいは、 TRUE または FALSE を
setValidateIdn() に渡すことで、
IDN の検証を有効あるいは無効にすることもできます。
現在サポートされていない IDN ホスト名に対するマッチングを行おうとすると、
国際化文字が含まれている場合に検証に失敗します。
追加の文字を指定した ccTLD ファイルが Zend/Validate/Hostname
に存在しない場合は、通常のホスト名の検証を行います。
IDN 検証
IDN の検証は、 DNS ホスト名の検証を有効にしている場合にのみ行われることに注意しましょう。
トップレベルドメインを検証
デフォルトでは、ホスト名の検証は既知の TLD の一覧に基づいて行われます。
この機能が不要な場合は、 IDN サポートを無効にするのと同じ方法で無効にできます。
TLD の検証を無効にするには、Zend_Validate_Hostname のコンストラクタに三番目のパラメータを渡します。
以下の例では、 IDN の検証は二番目のパラメータで有効にしています。
Zend_Validate_Hostname::ALLOW_DNS,
'idn' => true,
'tld' => false
)
);
]]>
あるいは、 TRUE または FALSE を
setValidateIdn() に渡すことで、
TLD の検証を有効あるいは無効にすることもできます。
TLD 検証
TLD の検証は、 DNS ホスト名の検証を有効にしている場合にのみ行われることに注意しましょう。