1

我完全是 php 的新手,只是想解决一些我自己的任务。任务是:根据用户的国家、用户代理正确地将用户重定向到几个附属链接,在某些情况下,我需要随机向特定国家的用户显示几个链接。

所以,我从以下代码开始(使用 Maxmind geoip):

<?php

include("geoip.inc");

$gi=geoip_open("geoip.dat",GEOIP_STANDARD);
$cc=geoip_country_code_by_addr($gi, getenv('REMOTE_ADDR'));

if($cc=="US")  header("Location: http://domain1.com");
if($cc=="AU")  header("Location: http://domain2.com");
if($cc=="CA")  header("Location: http://domain3.com");

geoip_close($gi);


if(stristr($_SERVER['HTTP_USER_AGENT'],"iPad"))
 {
 header("Location: http://domain4.com");
 }

if(stristr($_SERVER['HTTP_USER_AGENT'],"iPhone"))
 {
 header("Location: http://domain5.com");
 }


$num = Rand (1,3);
switch ($num) { 
case 1: header('Location: http://domain6.com');
break;
case 2: header('Location: http://domain7.com');
break;
case 3: header('Location: http://domain8.com');
break;
}


?>

在代码的第一部分,我只想重定向来自特定国家的用户,然后在下一部分代码中,所有其他国家的用户应该被重定向到其他剩余链接,Ipad 和 Iphone 用户应该从这些链接转到 domain4 和 domain5,其他应该随机看到 6,7 或 8。问题是只有带有随机重定向的第三方在代码中工作,GeoIP 不起作用。但是在 geoip_close($gi); 之后删除所有内容时 - GeoIP 完美运行。

我在代码中错过了什么?也许你看到更简单的方法?另一个问题是,maxmind geoip lite 无法识别所有国家,所以一小部分流量将是未知的——这些用户不应该丢失。

我使用了 maxmind geocountry lite 中的“geoip.dat”。它只支持 IPv4 地址,问题是如何结合识别 IPv4 和 IPv6 地址。可以同时使用“geoip.dat”和“geoipv6.dat”吗?如何?

非常感谢您的帮助!我会感谢每一个意见。

4

0 回答 0