Ker smo ljudje radovedni, si včasih želimo vedet, iz katere države je prišel na stran naš obiskovalec oz. preveriti kateri državi pripada določen IP.
PHP5 ima zato poseben class SoapClient, ki nam uporabo SOAP:”SOAP(Simple Object Access Protocol)”:http://en.wikipedia.org/wiki/SOAP storitev zelo poenostavi.
<?php // IP za katerega želimo izvedeti državo izvora $ip = '193.189.160.234'; // povežemo se na SOAP server $client = new SoapClient('http://www.webservicex.com/geoipservice.asmx?WSDL'); // pošljemo zahtevek za storitev $result = $client->GetGeoIP(array('IPAddress' => (string)$ip)); // preverimo ali se je zahtevek pravilno izvedel if($result->GetGeoIPResult->ReturnCode == 1) { // izpišemo dvo-znakovno kratico države echo $result->GetGeoIPResult->CountryCode . PHP_EOL; // izpišemo ime države, ki je v TISKANIH črkah echo $result->GetGeoIPResult->CountryName . PHP_EOL; } else { echo 'IP-ja ni v bazi!'; } ?>
Servis GeoIP nam omogoča vračanje imena države, dvo-znakovne kratice države ter še nekaj debug podatkov, ki pa za našo uporabo niso pomembni.
Tako lahko na enostaven način poizvemo iz kateri državi pripada nek IP, vendar je stvar na žalost za bolj intenzivno uporabo prepočasna in se je bolje poslužiti drugih metod npr. baze IP-jev na strežniku, kjer imamo spletno aplikacijo. Pametno je tudi nastavit piškotek z informacijo o državi, tako nam ni treba za vsako malenkost pošiljat zahtevka oz. iskati IP v bazi, ampak samo preverimo, če smo za uporabnika že opravili poizvedbo ali ne.
Zahteve:
- PHP z omogočenim SOAP extensionom (./configure --enable-soap)
UPDATE 03/09 @ 20:20: SFfreak je opazil, da sem naredil napako in nevede kopiral članek na bandrej.com. Za napako se iskreno opravičujem vsem. Obširnejša razlaga je tukajle.
geoIP ima tudi zastonjsko bazo (updatana vsak mesec)
EDIT:
za uporabo na svojem strežniku seveda
Vem, imam jo uporabljam na sverde1.com, zgoraj opisani način uporabljam za backup, če IP-ja ni v bazi…
Sicer pa sem že tudi zgoraj omenil, da ta način poizvedovanja ni primeren za masovno uporabo, tako je za kakšno manjše igranje čisto zadovoljiva rešitev, pa še osveževanje baze ti je prihranjeno.
In po čem se ta članek (razen uporabljene daljše if sintakse in že vnaprej določenega IP naslova v spremenljivki) razlikuje od tega?
Damn. Naj razložim kako je prišlo do tega.
Pred kakšnim letom sem pisal kodo za sverde1.com in sem zgleda uporabil ta vodič. Ko pa sem pisal prispevek sem si za osnovo vzel kodo od sverde1.com. Ker pa sem v tem letu večkrat modificiral kodo sverde1.com ter tudi enkrat naredil kompleten rewrite celotne strani mi ni niti na pamet prišlo oz. sem pozabil, da sem v originalu mogoče uporabil kodo iz katere druge strani (v tem primeru bandrej.com).
Iskreno se opravičujem bandreju ter avtorju članka na bandrej.com (masticore) in hkrati obljubljam, da bom v prihodnje bolj pazil.
Moram pa tudi dodat, da je zgornji primer “by the book”, tako da bi ga tudi v primeru, da bi si za osnovo vzel manual verjetno prišla ven precej podobna koda (najverjetneje bi v tem primeru izpustil castanje IP-ja).
EDIT: Razmišljal sem tudi o tem, da bi prispevek odstranil, vendar po razmisleku prišel do odločitve, da ga ne bom, ker s tem bi zanikal moje napake, ki se dogajajo, pa tudi namen avtorja članka na bandrej.com je bil, da nas nekaj nauči, tako kot vas želim jaz, zato prispevka ne bom brisal.
Hm, wordpress ti jo je zagodel – pri konfiguraciji bi morala biti pred enable-soap dva pomisljaja.
Saj je bil daljši pomišljaj
, ampak sem sedaj popravu in namesto – dal -