2011-10-05 95 views
4

我正在尋找一種明確的方法來檢測訪客是否來自中東。如果是這樣,我需要顯示一個不同的標題圖片(目前的圖片中有一個豬,所以它是皺眉)。如何通過PHP檢測中東訪問者?

我可以編碼if then else,但我只是尋找一個簡單的函數來檢測。以下是我用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; 

} 

任何人都可以幫忙嗎?謝謝。

+0

如果你從上面的國家有什麼問題? - 這也永遠不能保證你對國家的權利 – 2011-10-05 20:44:51

+7

亞太地區的穆斯林人數是中東地區的3倍。非洲。請參閱[維基百科](http://en.wikipedia.org/wiki/List_of_countries_by_Muslim_population) –

回答

2

您可以定義哪些國家屬於「中東」組 - 通過直接在PHP文件或數據庫中定義可配置數組,然後檢查由您的函數返回的給定國家是否屬於屬於「中東」。舉個例子,像這樣:

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

$country = get_country_by_ip($ip); 

if (in_array($country['country'], $middleEast) { 
echo 'Middle East!'; 
exit; 
} 
+5

從何時開始日本和中國被視爲中東的一部分? – 2011-10-05 20:48:11

+0

與遠東混淆,但是這是相對於建議的方法嗎? – ddinchev

+0

我不想這樣做,希望我可以動態地確定區域,但是這完全解決了。在單獨的回覆中發佈代碼。 – hatfieldajoshua

1
<?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'; 

} ?>