我希望能够使用PHP在我的网站上检测访问者来自哪个国家。
请注意,我并不是要将此用作安全措施或任何重要用途,只是更改一些单词的拼写方式 (美国人似乎认为“enrolment”这个词有两个L……疯狂的美国佬),以及在“选择您的国家”列表中提供默认选项。
因此,使用地理位置数据库有点过头了,而且我真的不想为此安装新的PHP库,那么最简单/最简单的方法是什么,以查找访问者来自哪个国家?
我希望能够使用PHP在我的网站上检测访问者来自哪个国家。
请注意,我并不是要将此用作安全措施或任何重要用途,只是更改一些单词的拼写方式 (美国人似乎认为“enrolment”这个词有两个L……疯狂的美国佬),以及在“选择您的国家”列表中提供默认选项。
因此,使用地理位置数据库有点过头了,而且我真的不想为此安装新的PHP库,那么最简单/最简单的方法是什么,以查找访问者来自哪个国家?
自 PHP 5.3.0 版本开始,提供了一种将$_SERVER['HTTP_ACCEPT_LANGUAGE']
变量解析为语言区域的函数。
$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $locale; // returns "en_US"
并不保证,但大多数浏览器会提交一个Accept-Language HTTP头,如果它们来自美国,则指定en-us。一些较旧的浏览器仅指定为en。而且,并非所有的机器都设置正确以指示其首选语言环境。但这是一个好的第一猜测。
基于英国的用户通常将其系统或用户语言环境设置为英国英语,在默认浏览器配置中应将结果作为en-gb的Accept Language头。其他国家也有en语言环境,例如en-za(南非),而且在理论上主要是像en-jp这样的组合也是可能的。
基于地理位置IP的猜测更不太可能正确推断出首选语言/本地化环境。Google认为基于IP地址地理位置进行内容协商是有意义的,但当我在日本或韩国时,这真的很恼人...
您可以查看大多数浏览器将发送的HTTP_ACCEPT_LANGUAGE
头(来自$_SERVER
)。
请参考Zend_Locale获取示例,或者您甚至可能希望使用该库。
您可以进行IP比较,而无需整个库来完成。
使用API,这样您就不需要任何东西。这是一个Web API,让您知道国家:
Example: http://api.hostip.info/get_html.php?ip=12.215.42.19
Return : Country: UNITED STATES (US)
你有没有考虑使用浏览器代理语言?你可能能够从中知道英语的类型。
这个网站叫做BlockCountry,可以让你按国家列出IP列表。当然,你不想屏蔽,但是你可以使用IP列表并进行比较(获取所有美国IP等),这可能不是很准确...
根据您所述的目的,与IP基础地理定位相比,Accept-Language头更适合。事实上,这正是Accept-Language的预期目的。
解析 $_SERVER["HTTP_ACCEPT_LANGUAGE"]
以获取国家和浏览器语言环境。
我使用HTTP_ACCEPT_LANGUAGE
$localePreferences = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
if(is_array($localePreferences) && count($localePreferences) > 0) {
$browserLocale = $localePreferences[0];
$_SESSION['browser_locale'] = $browserLocale;
}
GeoIP扩展是一个不错的选择。
或者你可以按照以下步骤操作:
从http://www.maxmind.com/app/geoip_country下载'geoip.dat'和geoip.inc文件
在geoip.inc文件头部,你会找到如何使用它的说明(例如初始化等)