

Prijavite se ili ako nemate nalog registrujte se.
Prikaži opcije



Verovatno ste već bili u prilici da koristite Google Analytics alat, gde između ostalog možete na mapi sveta videti odakle tačno dolaze posetioci vašeg sajta, ili ste tu i tamo posetili sajt koji bi Vam između ostalog izbacio podatke o Vašoj trenutnoj lokaciji. Naravno, nije u pitanju nikakva magija, tačna lokacija posetioca definisana je na osnovu njegove IP adrese, a tehnologija koja se koristi prilikom “lociranja” korisnika opšte je poznata pod nazivom GeoIP.
Danas ćemo pričati o tome kako “locirati” posetioca pomoću PHP-a i Max Mind-ove GeoIP baze. U primerima koji slede koristicemo besplatne(lite) verzije GeoIP baza, obzirom da se za pune verzije plaća $50USD + $12USD za update (GeoIP Country baza) i $370USD + $90USD za update (GeoIP City baza). Mana lite verzija je što nisu uvek 100% ažurne, ali će odlično poslužiti za naš tutorijal, a iz ličnog iskustva tvrdim da su upotrebljive i u većini live projekata.
MaxMind obezbeđuje API za nekoliko popularnih programskih jezika, (kompletna lista dostupna je ovde), a detalji o PHP API-u dostupni su ovde. Pored takozvanog “Pure PHP API-a” koji ćemo ovde koristiti, postoje i PECL ektstenzija kao i apache modul(mod_geoip), koji pružaju bolje perfomanse ali i komplikovaniji setup.
Za početak neophodno je da skinete sve fajlove koji se nalaze na http://www.maxmind.com/download/geoip/api/php/ i snimite ih negde unutar vašeg Web stabla(recimo /htdocs/geoip). Za korišćenje GeoIP Country treba skinuti lite bazu odavde, a za city GeoLiteCity bazu odavde. Radi jednostavnosti korišćenja, obe baze ćemo takođe raspakovati u isti direktorijum gde smo i snimili fajlove iz PHP API-a (/htdocs/geoip).
GeoIP Country
——————————–
Idemo sa primerom detekcije zemlje posetioca:
<?php
/**
* Primer Koriscenja GeoIP Country Baze
*
* @version $Id$
* @package geoip
* @copyright © 2006 Lampix.net
* @author Dragan Dinic <dinke@lampix.net>
*/
require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat", GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
//ako testirate u lokalu koristite ovaj ip radi testa
//posto ce $_SERVER['SERVER_ADDR'] biti 127.0.0.1
//$ip = "89.216.226.174";
$country_name = geoip_country_name_by_addr($gi, $ip);
$country_code = geoip_country_code_by_addr($gi, $ip);
if($country_name)
{
echo "Zemlja iz koje nas posecujete je: $country_name <br />";
echo "Skracena Oznaka: $country_code <br />";
}
else
{
echo "Nazalost, nismo bili u mogucnosti da vas lociramo.";
}
geoip_close($gi);
?>
Dakle, na početku uključujemo geoip.inc koji sadrži sve f-je potrebne za korišćenje GeoIP County baze, zatim kreiramo novu instancu GeoIP klase pomoću geoip_open f-je, i na kraju pozivamo odgovarajuće f-je (geoip_country_name_by_addr i geoip_country_code_by_addr) da bi smo dobili ime/kod zemlje u kojoj se nalazi ip adresa posetioca(u slučaju da testirate u lokalu nemojte koristiti $_SERVER[’REMOTE_ADDR’]).
Kao izlaz skripta, trebalo bi da dobijemo nešto poput:
Zemlja iz koje nas posecujete je: Serbia and Montenegro Skracena Oznaka: CS
F-je koje smo koristili da bi dobili podatke o zemlji posetioca, samo su neke od f-ja koje su dostupne u API-u. Ostatak možete i sami pronaći jednostavnom analizom PHP sourca geoip.inc fajla.
GeoIP City
—————————-
A sada da proširimo podatke o zemlji sa tačnom lokacijom (grad, poštanski kod itd).
<?php
/**
* Primer Koriscenja GeoIP City Baze
*
* @version $Id$
* @package geoip
* @copyright © 2006 Lampix.net
* @author Dragan Dinic <dinke@lampix.net>
*/
require_once("geoipcity.inc");
$gi = geoip_open("GeoLiteCity.dat", GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
//ako testirate u lokalu koristite ovaj ip radi testa
//posto ce $_SERVER['SERVER_ADDR'] biti 127.0.0.1
//$ip = "89.216.226.174";
$record = geoip_record_by_addr($gi, $ip);
if(!$record)
{
echo "Nazalost, nismo bili u mogucnosti da vas lociramo.";
}
else
{
echo "Zemlja: " .$record->country_name . "<br />";
echo "Skracena Oznaka: " . $record->country_code . "<br />";
echo "Skracena Oznaka2: " . $record->country_code3 . "<br />";
echo "Region: " .$record->region . "<br />";
echo "Grad: " .$record->city . "<br />";
echo "Postanski Kod: " .$record->postal_code . "<br />";
echo "Geog. Sirina: " .$record->latitude . "<br />";
echo "Geog. Duzina: " .$record->longitude . "<br />";
}
geoip_close($gi);
?>
Kao što vidite, PHP kod je sličan kodu za detekciju zemlje, s tim što smo koristili geoipcity.inc kao i GeoLiteCity.dat bazu. F-ja geoip_record_by_addr($gi, $ip) vraća instancu klase ‘geoiprecord’ koja sadrži kao promenljive(osobine) podatke o lokaciji koje koristimo u gornjem kodu. Nakon pokretanja skripta trebalo bi da dobijemo nešto poput:
Zemlja: Serbia and Montenegro Skracena Oznaka: CS Skracena Oznaka2: SCG Region: 02 Grad: Beograd Postanski Kod: Geog. Sirina: 44.8186 Geog. Duzina: 20.4681
Napominjem da je GeoIP baza najažurnija kada su u pitanju gradovi sa severnoameričkog dela planete, dok je njena preciznost znatno manja kada se dođe do “egzotike” u koju nažalost spada i Srbija.
CaseStudy - Redirekcija na osnovu IP adrese
————————————————————–
Za kraj znanje stečeno ovde iskoristićemo u jednom pravom projektu. Naime cilj je da se na dvojezičnom sajtu(blogu) korisnici koji dolaze iz Srbije usmere na srpsku verziju sajta, dok će se svi ostali usmeriti na englesku verziju. Evo kako to izgleda:
<?php
/**
* Case Study - Redirekcija na osnovu lokacije
*
* @version $Id$
* @package geoip
* @copyright © 2006 Lampix.net
* @author Dragan Dinic <dinke@lampix.net>
*/
require_once("geoip/geoip.inc");
$gi = geoip_open("geoip/GeoIP.dat",GEOIP_STANDARD);
$country_code = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);
if($country_code == 'CS')
{
header("HTTP/1.1 301 Moved Permanently");
header('Location: http://www.dinke.net/blog/sr/');
}
else
{
header("HTTP/1.1 301 Moved Permanently");
header('Location: http://www.dinke.net/blog/en/');
}
?>
Primer koji vidite gore koristi se upravo na ovom blogu, kako bi sve korisnike koji ne dolaze iz Srbije automatski preusmerio na englesku verziju bloga. Slanje custom 301 redirection headera je važno kako bi botovi (Google i sl.) indeksirali strane na odgovarajući način.

Matija Babić, urednik Index.hr svoj blog uglavnom koristi u folirantske svrhe, neki bi rekli za liječenje kompleksa iz mladosti u unosima koji sadržajno dosta podsjećaju na koncept hip-hop spotova. Uglavnom, povodom 4 godine postojanja Indexa Babić donosi seriju tekstova napisanu u potpuno drugačijem tonu: igrajući na kartu siromašnih studenata, mladalačkih ideala, “udaranja po svetinjama”, senzacionalizma i ralja kapitalizma.

Pre određenog vremena napravio sam malo istraživanje na temu kakvog je kvaliteta finansijsko izveštavanje domaćih kompanija na Internetu a usput sam našao i slična istraživanja rađena u USA (2000-te godine), Južnoj Africi (2003-će godine) kao i fragmente istraživanja na drugim tržištima. Vodeći se ovim istraživanjima definisao sam 20 atributa na osnovu kojih sam ocenjivao kvalitet web sajtova. Od 37 kompanija kojima se kontinuirano trgovalo na Beogradskoj berzi u avgustu ove godine 3 kompanije uopšte nisu imale web sajt. Izdvajam vrednosti za neke od atributa koji su najinteresantniji.
Atribut Srbija* prva specifikacija za XBRL 1.0 objavljena je u julu 2000. godine
Od svih kompanija jedino su Tigar i Hemofarm prevalili 80% ispunjenosti atributa. Od ostalih, banke po pravilu imaju solidne sajtove, mada je sve u svemu utisak prilično sumoran naročito ako se pri uporednoj analizi uzme u obzir vremenska dimenzija. Zapanjujuće je da na Internetu kasnimo više od 6 godina za najrazvijenijim. Koji su razlozi ovakvog stanja?
1. Kompanije nisu zainteresovane za prikupljanje sredstava na tržištu kapitala?
Mislim da ne, Agrobanka je prilično zainteresovana ali nije dostigla ni 30% u ovom istraživanju.
2. Značaj izveštavanja (na Internetu ali i u opšte) se ne shvata na pravi način?
Mislim da je ovo dosta blizu istine. Pored ovolikih oversubscribe-a u dokapitalizacijama što bi se mučili objašnjavajući ljudima da su uspešni.
3. Internet se još uvek kapira kao igračka za klince i frikove a ne kao playground for business?
Mislim da DA!


Blogodak je vaš pogled na domaću blogosferu. Prijavite se i napravite sopstvenu listu blogova koje pratite.