11

在 PHP 中有一个简单的方法来做到这一点。我想确保只有来自某些国家的网络请求才能访问我的网站。

有任何想法吗?

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:你知道那是不可能可靠地做到的吗?
客户:是的,但是这家公司说他们会卖给我一些可以做到的东西
开发人员:是的,但它不准确,很容易规避,通常表明基于互联网的内容的商业模式很差
客户:你能做到吗?
开发者:随便……

……六个月后……

客户:我的一些访问者一直在抱怨他们看不到我的内容,而一些不应该看到的坏人却能看到!
开发者:/me 拍脑袋

从那里开始只有一步“我可以拥有它,这样当用户在他们的浏览器中右键单击时,会弹出一个小标志,上面写着‘这些图像是白痴公司版权所有。’” ?”

对不起,今天显然是玩世不恭!

于 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 框架为此 Zend_Locale 提供了一个很棒的类

于 2008-10-03T14:23:11.033 回答