Необходимо установить сессию, если страна Австралия - PullRequest
2 голосов
/ 01 сентября 2011

как я могу проверить, является ли страна Австралией?Мне нужно установить сеанс, если страна - Австралия.

207.209.7.0   | 207.209.7.255 

Это IP-диапазон Австралии.

Как я могу использовать $_SERVER['REMOTE_ADDR'] в этой части без базы данных, простоесли заявление

Ответы [ 3 ]

1 голос
/ 01 сентября 2011

Во-первых, вы должны знать, что это не гарантировано. Люди могут обойти это, данные никогда не будут заполнены на 100% и т. Д.

Простая проверка блока IP-адресов недопустима. Вам необходимо использовать базу данных геолокации, такую ​​как MaxMind's GeoIP . Бесплатная база данных достаточно хороша для геолокации на уровне страны.

0 голосов
/ 01 сентября 2011

Если вы точно знаете диапазоны действительных IP-адресов, вы можете сделать что-то вроде:

function ip2number($IP) {
    $parts = explode('.', $IP);
    if(count($parts) != 4) return 0;
    return ($parts[3] + $parts[2] * 256 + $parts[1] * 256 * 256 + $parts[0] * 256 * 256 * 256);
}

$num = ip2number($_SERVER['REMOTE_ADDR']);
if($num >= ip2number('207.209.7.0') && $num <= ip2number('207.209.7.255')) {
    echo "Valid";
}

Как говорит Брэд, это не гарантировано, и есть способы обойти это, и у вас будетчтобы быть в курсе действительных диапазонов IP-адресов.

0 голосов
/ 01 сентября 2011

Проверьте этот вопрос о том, как определить чье-то местоположение в php.Затем добавьте ваше условие.

Поскольку вы не хотите использовать базу данных, я бы порекомендовал

$doc->loadXML(file_get_contents("http://api.ipinfodb.com/v2/ip_query.php?key=your_key&ip=" . $_SERVER['REMOTE_ADDR'] . "&timezone=false")); 

$country = $doc->getElementsByTagName('CountryName')->item(0)->nodeValue;

if ($country == 'australia') {

    // set session
}
...