11

PHPでこれを行う簡単な方法があります。特定の国からのWebリクエストのみが私のWebサイトにアクセスできるようにしたいと思います。

何か案は?

4

6 に答える 6

13

IPジオロケーションデータベース(一部は無料)と$ _SERVER ["REMOTE_ADDR"]を使用して、訪問者のIPアドレスを取得します。

http://www.maxmind.com/app/geolitecityは、商用バージョンの無料(精度が低い)バージョンです。

于 2008-10-03T14:24:04.323 に答える
8

Gilles のように、私は過去にこれに MaxMind の GeoIP を使用しました - 速度のために PECL 拡張で構成されています。それはかなりうまく機能しますが...

この種の要件は、この方法で訪問者の位置を確実に特定することは不可能であることを理解していない人から来る傾向があります。それを求めている人に、それがほとんど役に立たないことを理解してもらうことが非常に重要です。これでジオロケーションで起こる典型的なこと:

クライアント: IP Dev によってコンテンツを制限できるようにしたい
: 確実に行うのは不可能だということは知っていますか?
顧客: ええ、でもこの会社はそれができるものを私に売ってくれると言っています
Dev: はい、でもそれは正確ではなく、回避するのは簡単で、通常はインターネットベースのコンテンツのビジネスモデルが貧弱であることを示しています
顧客: できますか?
デブ:どうでもいい…

...半年後...

クライアント: 私の訪問者の何人かは、私のコンテンツを見ることができないと不平を言っています。
開発者: /me 平手打ち

そこから「ユーザーがブラウザで右クリックしたときに、 「これらの画像の著作権は Idiot Inc.」という小さなサインがポップアップ表示されるようにすることはできますか? ?」

申し訳ありませんが、今日は明らかにシニカルな気分です!

于 2008-10-03T15:12:10.997 に答える
4

両方の答え(ジオロケーション、ユーザーエージェント)は機能しますが、無効にすることができます。誰かがプロキシサーバーを使用したり、ユーザーエージェントを変更したりできます。Firefoxにはその目的のためのプラグインさえあります。

于 2008-10-03T14:40:27.957 に答える
2

Ben Dowling の回答を使用してもコードが機能しない場合は、これを試してください。

if (!in_array(substr($country, 0, 2), $allowed_countries)) {

それ以外の:

if(!in_array($country, $allowed_countries)) {
于 2015-01-22T13:02:07.653 に答える
1

洋ナシのパッケージもあります

http://pear.php.net/package/Net_Geo

于 2008-10-03T14:57:36.143 に答える
-2

ユーザーエージェントのロケールを検出できる特定のクラスがあります。そのようなことを試してください。Zend Frameworkには、このZend_Localeに最適なクラスがあります

于 2008-10-03T14:23:11.033 に答える