Norėdamas nustatyti žmogaus (lankytojo) vietovę (šalį, miestą, šalies kodą), koordinates (longitude, latitude) ir laiko juostą galvojau užteks pasinaudoti keliais .dat failais pirktais čia: http://www.maxmind.com/app/mod_geoip ir apdoroti juos su PHP.
Na galiausiais supratau, kad reikia įdiegti atskirame Linux kompe apache ir jam priderint MaxMind'o duotą PHP API.
Na galvojau ir vėl - viskas baigta, bet ne. Pasirodo reikia įdiegti "C" kalba parašytą biblioteką (libary)... Viską įdiegiau, toliau vėl pamaniau kad viskas baigta, tačiau kaip ne keista - klydau.
Reikėjo papildomai įdiegti Apache modulį "mod_geoip" kuris veikia tik tuomet kai įdiegta ir priderinta aukščiau minėta "C" biblioteka.
Na toliau jau tikrai pamaniau, kad viskas turi būti padaryta kaip reikia ir galima testuoti.
Pagaliau rezultatas puikiai suveikė ir jau savo apache serveryje turėjau lankytojų duomenis, kitaip tariant kai kas nors užeina į mano serveryje esančią svetainę - jam atvaizduoja jo duomenis nustatytus pagal IP adresą.
Bet užduotis nebuvo tiesiog tokia, apibendrintai man reikėjo pasiekti tokį rezultatą - kai lankytojas apsilanko mano svetainėje (esančioje ne nuosavame serveryje, o paprastame hostinge) jam turėjo parodyti jo vietovę, koordinates, laiko zoną.
Taigi, kur bėda? Bėda buvo ta, kad viskas buvo sukurta nuosavame serveryje (Linux), na žinoma kitur ir nebūtų pavykę sukurti, nes paprasti hostingai tam nesutverti. Na kadangi viskas buvo Linux serveryje, man reikėjo kažkokiu būdu paimti informaciją iš Linux serveryje esančio PHP failo ir perduoti jį į kitą PHP failą (į kurį užėjo lankytojas).
Na atodė gana paprasta ir aš pabandžiau pasinaudoti PHP cURL funkcijomis ir išsiųsti informaciją į Linux serveryje esantį PHP failą. Ką turiu galvoje sakydamas informacija? Informacija gali būti ir tuščia svarbiausia buvo įvykdyti užklausą, kad Linux serveryje esantis failas apdorotų tą "informaciją" ir grąžintų kokį nors rezultatą. kokį nors rezultatą - visą lankytojo informacija.
Na pasirodė viskas suveiks, išbandžiau - ir suveikė, bet ne visiškai taip kaip reikėjo, buvo šiek tiek aptemęs protas ir pamiršau, kad vykdant cURL bus naudojamas hostingo IP adresas, o ne kliento (lankytojo), kadangi taip jau yra sukonstruotas tas technologijų pasaulis. Na ir kadangi buvo naudojamas hostingo IP adresas, man tas Linux serveris ir nustatė hostingo informaciją. Ir kiekvienam vartotojui apsilankius svetainėje rodoma būtų tokia pati informacija kaip ir kitiems vartotojams, nes nustatomi duomenis ne pagal jų IP, o pagal hostingo (galima sakyti svetainės adreso).
Na laužiau pora valandų galvą, kaip man čia prasukus šį reikalą... Galiausiai radau MaxMind'e straipsniuką (http://www.maxmind.com/app/perl) kuriame aprašomas dar vienas API - tai yra "Perl" kalbos API. Peržiūrėjęs pamačiau, kad Perl API leidžia įvesti norimą IP adresą ir duomenys (vietovė, koordinatės ir kt.) jau bus traukiami ne iš užklausos, o iš nurodyto IP.
Tada šiaip ne taip apsirašiau Perl failiuką (patirties su Perl programavimo kalba daug neturiu) kuriame ištraukiu reikiamą informaciją iš argumente (paleidžiant Perl failą) nurodyto IP adreso. Tuomet PHP faile esančiame Linux serveryje kai į jį būna vykdoma užklausą padariau, kad jis automatiškai paleistų "Perl" failą (taip teisingai, PHP paleidžia Perl failą ir netgi grąžina rezultatą). Na Perl man grąžino visą reikiamą informaciją į PHP failą ir šiame PHP faile grąžinau apdorotą informaciją jau į pradinį failą esantį hostinge.
Tai apibendrintai visas procesas toks:
Hostingo PHP failas -> Siunčia užklausą -> Į Linux serverio PHP failą.
Linux serverio PHP failas -> Išgauna atsiųstą IP adresą -> Paleidžia Perl failą nurodydamas pastarąjį IP adresą kaip argumentą.
Perl failas -> Pasinaudodamas GeoIP API ištraukia visą informaciją pagal IP adresą iš duomenų bazės (kurią parduoda MaxMind) -> Grąžina jį Linux serverio PHP failui.
Linux serverio PHP failas -> Apdoroja gautą ifnormaciją ir sudeda jį į masyvą -> Grąžina duomenis į Hostingo PHP failą.
Hostingo PHP failas -> Už'catch'ina (pagauna) duomenis su savo cURL -> Apdoroja.
Na štai toks procesas vyko šią naktį. Naktis tikrai buvo ilga ir sudėtinga, nes buvo mažai prakltikos su C, Perl. Bei pačiu Linux seniai nesinaudojau, teko daug google'inti ir domėtis, testuoti, praktikuotis.
Svarbiausia viskas veikia, ir jeigu kada sugalvosite kažką panašaus daryti, siūlau jums šiuos straipsnius, jie nuo A-Z tvarkingai viską aprašo:
http://www.netdip.com/installing-the-maxmind-geolite-city-binary-database-and-the-mod-geoip-module-for-apache2-on-ubuntu-linux-2s/
http://www.maxmind.com/app/perl
Daugiau kaip ir nieko nereikia, bet žinoma čia galite parsisiųsti reikiamus elementus ir pasiskaityti oficialų API aprašymą: http://www.maxmind.com/app/mod_geoip
P.S. Jei jau užsiimsite tuo, tai norėčiau tik pridurti, kad tai ne kiekvienam ir tikrai jeigu esate pradinukas, geriau naudokitės paprastesniais informacijos išgavimais pagal IP, nes aš tai naudojau tik tam kad išgauti longitude ir latitude.
Reikia šiek tiek patirties, nepaisant to kad visa tai aprašyta sekančiomis kalbomis: PHP, C, Perl. Bei žinoma reikia praktikos su Linux.
Ačiū už dėmesį, man viskas veikia, rezultatą pasiekiau, ir galbūt net jūs iš to išpešite naudos.
Geros dienos.
Papildyta 10:22
Vos ne pamiršau, rezultatą galite pamatyti čia (jis sutvarkytas grąžinimui, todėl be specialiųjų efektų): http://91.225.104.10/ip.php na ir žinoma jūs čia nukreipiami jau į Linux PHP failą, o ne į hostingo.
Jei kam iškyla klausimas - o kam aš tai dariau, tai iš esmės turėjau užsakymą, kuriame tai turėtų veikti, todėl dabar praktikavausi, kad vėliau greitai galėčiau tai sukurti. O ir šiaip pati 3Dev svetainė prasidėjus vartotojų dalyvavimui tai turės.