基于地理位置的 PHP IF 语句?

Posted

技术标签:

【中文标题】基于地理位置的 PHP IF 语句?【英文标题】:PHP IF Statment Based On Geo Location? 【发布时间】:2012-04-04 02:46:14 【问题描述】:

有没有办法根据人员位置执行 php If 语句?

我的问题归结为亚马逊附属链接。在 Amazon.co.uk 上购买 DVD 的链接与在 Amazon.com 上购买的链接不同,我想要一种只显示正确的链接。

同时,如果他们不在任何一个国家/地区,那么我一开始就不希望显示链接。

例子:

If Location = UK; print "amazon-UK-link"
If Location = US; print "amazon-US-link"
If location = None of the above; print nothing

【问题讨论】:

简单,问用户。唯一可靠的方法。 达贡是对的。您可以根据需要使用 IP 来定位服务,但没有一个是 100% 准确的,并且某些类型的代理无法检测到(因此检查了错误的 IP)。但这并不意味着位置服务不值得一试。 【参考方案1】:

您可以使用:string geoip_country_code_by_name ( string $hostname )

例子:

<?php
$country = geoip_country_code_by_name('www.example.com');
if ($country) 
    echo 'This host is located in: ' . $country;

?>

输出:

此主机位于:美国

对于您的情况,您可以使用:geoip_country_code_by_name($_SERVER['REMOTE_ADDR']); 获取当前用户的国家代码。

【讨论】:

顺便说一句,如果您没有设置 geoip,那将无法正常工作。请参阅有关如何设置 geoip 的说明:php.net/manual/en/geoip.setup.php【参考方案2】:

您将不得不使用访问者的 IP 地址来查找他们的实际位置。除了使用 PHP 的 GeoIP 扩展(正如stete 指出的那样),还有两种方法可以做到这一点:

简单的方法

使用像http://www.hostip.info这样的外部服务

使用您自己的 MySQL 数据

1.) 检索访问者的 IP 地址:

if (getenv('HTTP_X_FORWARDED_FOR')) 

    $ip_address = getenv('HTTP_X_FORWARDED_FOR');
 
else 

    $ip_address = getenv('REMOTE_ADDR');

2.) 将访问者的 IP 地址转换为 IP 号:

$ips = explode(".",$ip_address);
return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256);

3.) 从您的数据库中找到您可以download here 的IP 号码。 例如:IP 地址 202.186.13.4 转换为 IP 号 3401190660。它位于以下 IP 号的开头和结尾之间:

Beginning_IP | End_IP      | Country  | ISO
-------------+-------------+----------+----
3401056256   | 3401400319  | MALAYSIA | MY

【讨论】:

我相信 getenv(HTTP_X_FORWARDED_FOR) 应该是 getenv('HTTP_X_FORWARDED_FOR') 和 REMOTE_ADDR 一样。此外,人们通常使用 $_SERVER 或 $_ENV,虽然我猜 getenv() 没有任何问题。 另外,哇,hostip.info 认为我的 IP 在加利福尼亚。我实际上在阿肯色州。刚刚检查了其他一些服务,它们都正确无误。 (MaxMind 将它带到大约 3 英里>. @Corbin 显然我住在英格兰北部的一条河边。我实际上在英格兰西南部的乡村中部。这么近【参考方案3】:

您需要通过 maxmind http://www.maxmind.com/app/ip-location 使用 geoip,或者还有其他选项,搜索 Country API 的 IP,网上有一些。

【讨论】:

【参考方案4】:

您可以使用来自http://www.geoplugin.net/ 的简单 API

$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".getRealIpAddr());
echo $xml->geoplugin_countryName ;


echo "<pre>" ;

foreach ($xml as $key => $value)

    echo $key , "= " , $value ,  " \n" ;


function getRealIpAddr()

    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    
    else
    
      $ip=$_SERVER['REMOTE_ADDR'];
    
    return $ip;

输出

United States
geoplugin_city= San Antonio
geoplugin_region= TX
geoplugin_areaCode= 210
geoplugin_dmaCode= 641
geoplugin_countryCode= US
geoplugin_countryName= United States
geoplugin_continentCode= NA
geoplugin_latitude= 29.488899230957
geoplugin_longitude= -98.398696899414
geoplugin_regionCode= TX
geoplugin_regionName= Texas
geoplugin_currencyCode= USD
geoplugin_currencySymbol= $
geoplugin_currencyConverter= 1

它让你有很多可以玩的选择

谢谢

:)

【讨论】:

以上是关于基于地理位置的 PHP IF 语句?的主要内容,如果未能解决你的问题,请参考以下文章

基于 Python 字符串的 if 语句

同一位置块中的多个 if 如何交互?

PHP Joomla IF模块位置

基于地理位置的查询在 php 的 mongo 中不起作用

hibernate中写入if判断然后赋值位置没if之后的赋值语句均不执行呢?帮忙看看谢谢!!

php获取用户真实ip地址与地理位置