Autor Subiect: [PHP] Script ce identifică ţara vizitatorului  (Citit de 38 ori)

0 Membri şi 1 Vizitator vizualizează acest subiect.

Offline Iosif

  • Administrator
  • *****
  • Mesaje postate: 7
  • Karma: +0/-0
  • Gen: Bărbat
    • Vezi Profilul
    • Joseph Szenasi
[PHP] Script ce identifică ţara vizitatorului
« : Iulie 17, 2010, 04:31:12 »
Am avut nevoie de un astfel de script pentru uz personal.

Iată ce am găsit până acum şi pare-se că funcţionează OK.

<?php
function countryCityFromIP($ipAddr)
{
   
//Aceasta functie va gasi tara si localitatea dupa adresa IP a viyitatorului
   //Dezvoltat de Roshan Bhattarai 
   //Vizitati http://roshanbh.com.np pentru scripturi asemanatoare.
  
  //verifica adresa IP
  
ip2long($ipAddr)== -|| ip2long($ipAddr) === false trigger_error("Invalid IP"E_USER_ERROR) : "";
  
// Lasati aceste notite in script pentru a va conforma conditiilor de utilizare
  
$ipDetail=array(); //initialize a blank array
  //preia rezultatele XML de la hostip.info
  
$xml file_get_contents("http://api.hostip.info/?ip=".$ipAddr);
  
//preia numele orasului din <gml:name> si</gml:name>
  
preg_match("@<Hostip>(\s)*<gml:name>(.*?)</gml:name>@si",$xml,$match);
  
//atribuie numele localitatii unui array
  
$ipDetail['city']=$match[2]; 
  
//preia numele tarii din <countryName> si </countryName>
  
preg_match("@<countryName>(.*?)</countryName>@si",$xml,$matches);
  
//atribuie numele tarii variabilei $ipDetail 
  
$ipDetail['country']=$matches[1];
  
//preia numele tarii in interiorul nodului <countryName> si</countryName>
  
preg_match("@<countryAbbrev>(.*?)</countryAbbrev>@si",$xml,$cc_match);
  
$ipDetail['country_code']=$cc_match[1]; //assing the country code to array
  //intoarce ca rezultat orasul, tara si codul tarii
  
return $ipDetail;

  
?>

Astfel avem disponibil:
$IPDetail['country'] // taraşi
$IPDetail['city'] // orasul
Ca utilizare putem avea ceva de genul acesta:

<?php
$ip 
getenv("REMOTE_ADDR") ; // preia adresa IP a vizitatorului
$IPDetail=countryCityFromIP($ip); // genereaza array-ul


if ($IPDetail['country']=="Romania") {
echo 
"Salut romane!.";
}
else { echo 
"Hi there!";}
?>


De reţinut este faptul că nu este mereu disponibil (detectabil) numele ţării.