をコービンの答えが唯一のブロック明示的なは、あなたが入力する必要がありますブロックするすべてのドメイン/サブドメインの組み合わせを意味すると一致します。これは、 "www.domain.com" & "domain.com"のような2つのドメインしかない場合には問題ありません。数十、数百、または数千があれば、それは本当の頭痛になるでしょう。この機能は、禁止されたドメイン文字列がドメイン名のどの部分にあるかをチェックするので、少し頑強です。それはあなたが誰かが「www.banned.com.notbanned.com」のドメイン名として、以来ような何かを持っている可能性がオフのチャンスがあり、一致ブラインド文字列がありますので、
$bannedDomains = array('banned.com') // blocks top level & subdomains.
function bannedDomain($url, $bannedDomains) {
$domain = parse_url($url, PHP_HOST_URL);
foreach($bannedDomains as $bannedDomain) {
if (strpos($domain, $bannedDomain) !== false) {
return true;
}
}
return false;
}
の注意点は、ここにもあります禁止ドメイン文字列がそのドメイン内にある場合、有効なドメイン名をブロックすることになります。ドメイン照合&のバリデーションは実際にはかなり難しいですが、そこにあるサブドメイン&のさまざまな種類があるからです。
明示的に一致するだけの場合は、ドメインを連想配列&のキーとして使用し、禁止リストに存在するかどうかをisset()で検出する方が効率的です。
$bannedDomains = array(
'www.banned.com' => true,
'banned.com' => true
);
function bannedDomain($url, $bannedDomains) {
$domain = parse_url($url, PHP_HOST_URL);
return isset($bannedDomains[$domain]);
}
スーパーロバストシステムが本当に必要な場合は、データベース内のルックアップやHTTPサーバーの機能を使用する方がよいでしょう。
どのようにブロックしていますか?これは '.htaccess'を使っているのですか?それはPHPでやっていますか、それとも違う、奇妙な解決策ですか? – Bojangles
これはApacheサーバーですか?おそらく.htaccess経由で簡単に行うことができます –
スクリプトはブックマークサービスのようなものです。特定のドメインがブックマークされないようにしたい.htaccessはここで動作しません –