Как можно обнаружить посетителей с Ближнего Востока с помощью PHP?


Я ищу четкий способ определить, является ли посетитель с Ближнего Востока. Если это так, мне нужно отобразить другое изображение заголовка (в текущем есть свинья, поэтому на него смотрят неодобрительно).

Я могу закодировать для этого "если", то "еще", но я просто ищу простую функцию для обнаружения. Вот функция, которую я использовал, чтобы получить страну по IP:

function get_country_by_ip($ip){

    if(!$ip) return false;    # Missing parameter

    # Pull the XML
    $url = 'http://api.hostip.info/?ip='.$ip;
    $xml = simplexml_load_file($url);

    # Parse the data and store into array
    $citystate = explode(", ", $xml->children('gml', true)->featureMember->children()->Hostip->children('gml', true)->name);
    $result['city'] = $citystate[0];
    $result['state'] = $citystate[1];
    $result['country'] = $xml->children('gml', true)->featureMember->children()->Hostip->countryName;
    $result['country_abbr'] = $xml->children('gml', true)->featureMember->children()->Hostip->countryAbbrev;

    return (object) $result;

}

Кто-нибудь может помочь? Спасибо.

 4
Author: hatfieldajoshua, 2011-10-06

3 answers

Вы можете определить, какие страны входят в группу "Ближний Восток", определив настраиваемый массив непосредственно в файле PHP или в базе данных, а затем проверьте, входит ли данная страна, возвращаемая вашей функцией, в список стран, принадлежащих к "Ближнему Востоку". На вашем примере, что-то вроде этого:

$middleEast = array(
 'Syria',
 'Iraq',
 ... // all the rest
);

$country = get_country_by_ip($ip);

if (in_array($country['country'], $middleEast) {
 echo 'Middle East!';
 exit;
}
 2
Author: ddinchev, 2011-10-05 21:15:39
<?php

/* get country by ip */

function get_country_by_ip($ip){

    if(!$ip) return false;

    /* pull the xml */

    $url = 'http://api.hostip.info/?ip='.$ip;
    $xml = simplexml_load_file($url);


    /* parse the data and store into array */

    $citystate = explode(", ", $xml->children('gml', true)->featureMember->children()->Hostip->children('gml', true)->name);

    $result['city'] = $citystate[0];
    $result['state'] = $citystate[1];

    $result['country'] = (array) $xml->children('gml', true)->featureMember->children()->Hostip->countryName;
    $result['country'] = $result['country'][0];

    $result['country_abbr'] = (array) $xml->children('gml', true)->featureMember->children()->Hostip->countryAbbrev;
    $result['country_abbr'] = $result['country_abbr'][0];

    return (object) $result;

}


/* get country */

$geo_info = get_country_by_ip($_SERVER['REMOTE_ADDR']);


/* MENA countries */

$mena = array(

    'ALGERIA',

    'BAHRAIN',

    'EGYPT',

    'IRAN',

    'IRAQ',

    'ISRAEL',

    'JORDAN',

    'KUWAIT',

    'LEBANON',

    'LIBYA',

    'MOROCCO',

    'OMAN',

    'PALESTINE',

    'QATAR',

    'SAUDI ARABIA',

    'SYRIA',

    'TUNISIA',

    'UNITED ARAB EMIRATES',

    'YEMEN',

    'ARMENIA',

    'AZERBAIJAN',

    'CYPRUS',

    'DJIBOUTI',

    'MALTA',

    'MAURITANIA',

    'SAHRAWI ARAB DEMOCRATIC REPUBLIC',

    'SOMALIA',

    'SUDAN',

    'TURKEY',

);


/* image with a hog */

$img = 'mmm-pork.jpg';

if(in_array($geo_info->country, $mena)){


    /* image with no hog */

    $img = 'cant-have-pork.jpg';

} ?>
 1
Author: hatfieldajoshua, 2011-10-10 13:49:01

Я предлагаю вам попробовать http://phpweby.com/software/ip2country бесплатно.

 0
Author: ShirazITCo, 2011-10-05 20:48:40