View Full Version : [PHP]Nazione?
cioa vorrei riuscire a tirar fuori la nazione dei visitatori del mio sito in modo da mettere ip e la bandiera:
adesso con $_SERVER nn funziona perfettamente, allora mi pare che ci sono dei range ip predefinite per ogni nazione, chi mi saprebbe aiutare
Thx ;)
Avevo trovato una classe che ti faceva proprio questa cosa :D
tramite ip ti tirava fuori la nazione con la bandiera, era su phpclasses.net...
Ora non ho tempo, stasera se non hai risolto cerco ;)
Avevo trovato una classe che ti faceva proprio questa cosa :D
tramite ip ti tirava fuori la nazione con la bandiera, era su phpclasses.net...
Ora non ho tempo, stasera se non hai risolto cerco ;)
thx provo a vedere ;)
cioa vorrei riuscire a tirar fuori la nazione dei visitatori del mio sito in modo da mettere ip e la bandiera:
adesso con $_SERVER nn funziona perfettamente, allora mi pare che ci sono dei range ip predefinite per ogni nazione, chi mi saprebbe aiutareIl fatto è che non c'è una relazione diretta tra IP/hostname del client e la nazione di provenienza. Qualunque cosa tu possa usare per ottenerla (una classe apposita, una libreria specifica, ecc...) c'è comunque da fare una "query" da qualche parte su qualche servizio online per avere questa informazione.
Spero di non sbagliarmi ovviamente. ;)
Il fatto è che non c'è una relazione diretta tra IP/hostname del client e la nazione di provenienza. Qualunque cosa tu possa usare per ottenerla (una classe apposita, una libreria specifica, ecc...) c'è comunque da fare una "query" da qualche parte su qualche servizio online per avere questa informazione.
Spero di non sbagliarmi ovviamente. ;)
a chi faccio la query?
Il fatto è che non c'è una relazione diretta tra IP/hostname del client e la nazione di provenienza. Qualunque cosa tu possa usare per ottenerla (una classe apposita, una libreria specifica, ecc...) c'è comunque da fare una "query" da qualche parte su qualche servizio online per avere questa informazione.
Spero di non sbagliarmi ovviamente. ;)
Se non sbaglio infatti faceva una richiesta esterna...
ad un server whois.
sotto linux: whois [ip]
ti da tante belle informazioni tra cui il nome del provider
link utili:
http://www.ripe.net
http://cqcounter.com/whois/
ad un server whois.
sotto linux: whois [ip]
ti da tante belle informazioni tra cui il nome del provider
link utili:
http://www.ripe.net
http://cqcounter.com/whois/
si ma come formulo una query per un sito esterno, e poi ogni qual volta che richiedi un whois ti chiede di inserire il codice scritto in una img affianco per evitare appunto che altri creino script automatici :?:?:?
quello era un esempio dei risultati che puoi ottenere, se hai la possibilità di chiamare il comando whois da php....hai risolto, ti basta solo fare il parse di quello che ti restituisce
quello era un esempio dei risultati che puoi ottenere, se hai la possibilità di chiamare il comando whois da php....hai risolto, ti basta solo fare il parse di quello che ti restituisce
??? :doh: :mc: :confused: nn ho capito molto sorry per la mia ignoranza, ma potresti farmi n'esempio?
usando il comando passthru:
$cmd = "whois ".$ip;
$str = passthru($cmd);
ora in $str hai il risultato del comando whois, ti resta "solo" da fare il parse per estrapolare la nazione.
ti consiglio inoltre di controllare i parametri del comando whois per fare sempre l'interrogazione sullo stesso server whois in modo da avere sempre lo stessa formattazione in output (server whois diversi hanno risultati diversi, in fatto di formattazione dati).
non me ne intendo di regexp, ma forse con una regexp ben fatta non deve essere troppo difficile trovare la nazione.
altrimenti mi viene in mente adesso, nelle variabili di sistema di php viene mostrata la versione di browser ecc, e anche la lingua del browser.
Faccio solo presente che facendo un 'whois' bisogna anche prestare attenzione a quale server whois fare la richiesta!
Se faccio:
whois 83.210.47.50
(l'indirizzo è puramente a caso)
mi elenca una serie di dati per dirmi che il blocco 83.0.0.0 - 83.255.255.255 è allocato al RIPE e ... basta!
Se invece faccio:
whois -h whois.ripe.net 83.210.47.50
allora ho i dati completi del blocco 83.210.0.0 - 83.210.255.255 e viene indicato anche il 'country'.
Faccio solo presente che facendo un 'whois' bisogna anche prestare attenzione a quale server whois fare la richiesta!
Se faccio:
whois 83.210.47.50
(l'indirizzo è puramente a caso)
mi elenca una serie di dati per dirmi che il blocco 83.0.0.0 - 83.255.255.255 è allocato al RIPE e ... basta!
Se invece faccio:
whois -h whois.ripe.net 83.210.47.50
allora ho i dati completi del blocco 83.210.0.0 - 83.210.255.255 e viene indicato anche il 'country'.
;) thXxxx!!! provo e faccio sapere :sofico:
beppegrillo
12-12-2006, 18:28
magari c'è qualcuno che mette a disposizione webservices proprio per questo, altrimenti procedi con la via manuale :)
*Prova a vedere come lo fa phpstats.
Ecco la classe che ti dicevo:
<?php
class ip2country
{
var $countries_list; //Percorso lista degli stati
var $flags_dir; //Directory con le bandiere
var $_COUNTRIES; //Array con la lista degli stati
function ip2country($cl,$fd,$ip=false)
{
$this->countries_list=$cl;
$this->flags_dir=$fd;
$this->readCountries() or die ("Unable to read the countries");
if ((bool)$ip) return $this->parseIP($ip);
}
function parseIP($ip)
{
$DATABASE = "whois.ripe.net";
$info = '' ;
$sk=fsockopen($DATABASE, 43, $errno, $errstr, 30) or die ("Unable to connect to the server");
fputs ($sk, $ip ."\r\n") or die ("Unable to send data to the server");
while (!feof($sk))
{
$info.= fgets ($sk, 2048);
}
if (preg_match( '/^\x20*country\x20*:\x20*(\w{2})/im',$info,$arr ))
{
$found=false;
for($i=0;$i<count($this->_COUNTRIES);$i++)
{
$c=$this->_COUNTRIES[$i];
if (trim($c[0]) == trim($arr[1])) return $c;
}
return array("??","","");
}
else array("??","","");
}
function readCountries()
{
if (file_exists($this->countries_list))
{
$handle = file($this->countries_list) or die("Unable to open the countries's file list");
foreach($handle as $row)
{
list($iso,$name,$flag) = explode(";",$row);
$this->_COUNTRIES[]=array($iso,$name,$this->flags_dir.$flag);
}
return true;
}
else return false;
}
}
?>
ottima...accede direttamente al server whois e c'è già la regexp per estrarre la nazione.
Ecco la classe che ti dicevo:
<?php
.............
}
else return false;
}
}
?>
Ti lovvo tantissimo ianaz ;) thx , ora nn posso finire ma domani faccio e godo :D
Thx CiauZzz :D :D
Ti lovvo tantissimo ianaz ;) thx , ora nn posso finire ma domani faccio e godo :D
Thx CiauZzz :D :D
ahaha sei anche svizzero :P
rotfl
na domanda, come istanzio un ogetto.....
tipo in java: nClasse c = new nClasse();
in php ?? :muro:
haaa ecco sono riuscito finalmente
...
...
$ipTemp = $_SERVER['REMOTE_ADDR'];
$myCountrie= new ip2country();
$myCountrie->parseIP($ipTemp);
$risultato = $myCountrie->readCountries();
echo"$risultato";
...
...
adesso manca solo da istanziare qualche variabile all'interno della classe e sono aposto :D
niente da fare sono in un vicolo ceco : (
ma na cosa per far partire il costruttore ho bisogno del nome paese e del e il percorso per la flags, ma allora come minchia faccio a interrogare sto ip per capire da dov'è..:(
Il percorso delle flags...nel file che ho scaricato c'erano pure le bandiere...
hahhahahahhaha
http://www.ip2location.com/
loro c'e l afanno xò nn mettono a disposizione il source :(
uffa mi sto incacchiando di brutto per sta cosa ....
Ma la classe li non ti funziona?
A me funzionava perfettamente, mi dava automaticamente la bandiera
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.