PDA

Prikaži potpunu verziju : Mala pomoc iz PHP-a


mirkan03
2.2.2010, 12:35
Pozdrav svima!!!
Treba mi jedna mala pomoc u kodu PHP.
Pravim jedan sajt, pa sam hteo da ocitam i sacuvam IP i Zemlju iz koje dolazi svaki posetilac u falj npr log.txt

E sad. Sve ide ok sa IP-jem. Evo i koda.

<?php
function zapisiIP(){
$filename = "log.txt"; //fajl u kojem ce biti zavedeni IP-evi
if($fpw = fopen($filename, "a")){ //otvaranje fajla za dodavanje novog zapisa
$string_za_upis = sprintf("[%s] | IP: %s\n",date("d.m.Y.|H:i:s"), $_SERVER['REMOTE_ADDR']);
fputs($fpw, $string_za_upis);
} else die("Pristup fajlu za upis onemogucen!");
fclose($fpw); //zatvaranje fajla
}
?>

Medjutim problem mi pravi Zemlja. Necu da koristim nikakvu bazu ako nemora, pa sam nasao kod na netu:

<?php
$country = ' ';
$IP = $_SERVER['REMOTE_ADDR'];
if (!empty($IP)) {
$country = file_get_contents('http://api.hostip.info/get_html.php?ip='.$IP);
}
?>

Medjutim prijavljije mi gresku.
Molim vas pomozite....:D

mirkan03
2.2.2010, 12:37
Nisam naveo da mi pravi problem kod iscitavanja podataka sa date adrese.
TJ nemoze sa odradi funkciju - file_get_contents('http://api.hostip.info/get_html.php?ip='.$IP).
Sorry, nisam bio precizan..

Ivan Stojmenovic
2.2.2010, 14:39
Nije ti dobra sintaksa pokusaj malo to da sredis iskoristi malo promenljive u php-u najbitnije ti je pravilno napisati sintaksu ovaj tvoj kod mi je sve nesto zbrda zdola.... Nije tesko da ti sada ispisem za 2 minuta taj kod ali dzaba kad opet neces ukapirati zato bolje malo sam mucni glavom nije tesko ni malo idi malo na
http://www.w3schools.com/PHP/DEfaULT.asP
pogledaj prouci i ukapiraces poentu toga!!!

irreal
2.2.2010, 15:27
@Ivan Stojmenovic

sta fali sintaksi ?
sve je korektno napisano.

<?php // otvara php tag
$country = ' '; // priprema varijablu koja ce sadrzati ime zemlje posetioca
$IP = $_SERVER['REMOTE_ADDR']; // uzima ip adresu posetioca
if (!empty($IP)) { // proverava da li je uspelo uzimanje ip adrese
$country = file_get_contents('http://api.hostip.info/get_html.php?ip='.$IP); //preuzima fajl sa nekog remote servera dinamicki generisuci url na osnovu fiksnog dela i dodavanjem ip adrese posetioca kao parametar
//
// eventualni kod koji tek treba da napise, koji ce parsovati samo ime zemlje iz celokupnog sadrzaja
//
}
?> // zatvara php tag

zaista ne vidim sta ti je tu "zbrda zdola"
ako bi mogao da mi pojasnis, ili pokazes tvoje superiornije resenje, to bi bilo super. (ne kazem da ne moze da se odradi u manje linija, itd, al ovako je vrlo pregledno i jasno sta se tu dogadja - bas kako i treba da bude)


@mirkan03

testirao sam servis rucno i iako nisam dobio nikakve korisne informacije, jeste vratio nesto. (Unknown Country i Unknown City)

ako tebi "zabada", onda bi ja na tvom mestu proguglao file_get_contents funkciju. proveri da li je server na kojem hostujes taj php fajl podesen da radi ta funkcija, i da li je njeno koriscenje dozvoljeno.

mirkan03
2.2.2010, 19:45
@irreal - Hvala druze na odgovoru, probao sam da 'googlam' i nista slicno nisam nasao.
skontao sam samo da ima dosta problema sa tom funkcijom....:-(

red : $country = file_get_contents('http://api.hostip.info/get_html.php?ip='.$IP)
bi trebalo da vrati samo grad i drzavu, dok postoji i sledeca adresa: 'http://api.hostip.info/country.php' koja vraca samo 2slovnu drzavu.

Na njihovom sajtu (http://www.hostip.info/use.html) sve radi ok, ali nemogu da provalim sto meni neradi...

Da li ima neko bolje resenje????

Inace hostovao sam kod Neobee-a!!

@Ivan Stojmenovic - Ovo je po meni pregledno, ali ako imas bolje resenje slobodno ga postavi i pomozi. Ja neznam "jos" za bolje!!! :-D

holodoc
2.2.2010, 19:56
Kažeš da imaš problema sa file_get_contents funkcijom ali nisi naveo koju grešku dobijaš, da li je u pitanju problem sa parametrima ili nešto drugo. Postavi grešku koju dobijaš pri pokušaju izvršenja funkcije pa da vidimo o čemu se konkretno radi.

U svakom slučaju nakon toga napravi jedan php fajl sledeće sadržine
<?php
phpinfo();
?>i uploaduj ga na server na kome se problem javlja a nakon što pozoveš taj fajl kroz browser proveri u podacima koje dobiješ koju vrednost imaš za podešavanje allow_url_fopen (i global i runtime vrednost).

Što se tiče činjenice da želiš da prikupljaš podatke o posetiocima sajta iskreno mnogo bolja ideja od ručnog čačkanja ti je Google Analytics (http://www.google.com/analytics/) ili na kraju krajeva instalacija nekog web analyzer aplikacije na sopstvenom serveru (tipa awstats (http://awstats.sourceforge.net/) ili webalizer (http://www.mrunix.net/webalizer/)). Naravno instalacija ovog softvera podrazumeva da su serveru pod tvojom kontrolom ali čak i da nisu ako si na nekom normalnom hosting provajderu imaćeš verovatno mogućnost da koristiš neku već postojeću aplikaciju za tu namenu.

E sad ako si baš uporan da nastaviš sa izradom svoje aplikacije onda ti je najbolji pristup da koristiš podatke na svom serveru jer nikad ne znaš kad će sajt koji nudi opciju identifikacije posetioca po IP adresi pući ili prestati da radi (ovaj tvoj servis očigledno iz nekog razloga ne radi kako treba.) Ubedljivo najbolja i najažurnija baza podataka sa IP adresama i njima odgovarajuim državama je u vlasništvu MaxMind (http://maxmind.com/) kompanije. Tu možeš da nađeš besplatnu bazu koja sadrži samo IP adrese i odgovarajuće države kojima pripada ta adresa dok postoji i komercijalna varijanta koja sadrži i gradove zajedno sa GPS pozicijama i mnigim drugim perverzijama. Evo primera jedne mini aplikacije koja je izrađena baš na osnovu besplatne baze (http://csl.tfc.kg.ac.rs/~brezanac/geoip/ (http://csl.tfc.kg.ac.rs/%7Ebrezanac/geoip/)). Aplikacija naravno ima i servisni interfejs ali ja ovde neću davati URL do njega pošto je taj deo rezervisan ipak samo za laboratorisjke projekte :) Bitno je da se sve bitne instrukcije za rad sa ovom bazom (nije neophodno da se baza skladišti u MySQL ili slično) nalaze na sledećoj stranici http://www.maxmind.com/app/php.

mirkan03
2.2.2010, 19:58
Znaci greska koju mi prijavljuje je:

<b>Warning</b>: file_get_contents(): URL file-access is disabled in the server configuration in <b>..../functions.php</b> on line <b>134</b><br />
<br />
<b>Warning</b>: file_get_contents(http://api.hostip.info/get_html.php?ip=81.18.61.42): failed to open stream: no suitable wrapper could be found in <b>..../functions.php</b> on line <b>134</b><br />


Sta to znaci????

holodoc
2.2.2010, 20:03
Znaci greska koju mi prijavljuje je:

<b>Warning</b>: file_get_contents(): URL file-access is disabled in the server configuration in <b>..../functions.php</b> on line <b>134</b><br />
<br />
<b>Warning</b>: file_get_contents(http://api.hostip.info/get_html.php?ip=81.18.61.42): (http://api.hostip.info/get_html.php?ip=81.18.61.42%29:) failed to open stream: no suitable wrapper could be found in <b>..../functions.php</b> on line <b>134</b><br />


Sta to znaci????Znači da si pečen :) Nemaš dozvolu da koristiš file_get_contents funkciju da bi dovlačio podatke sa neta. Ništa neobično za Neobee ;) Za svaki slučaj odradi ovaj deo sa phpinfo funkcijom da budemo sigurni i proveri šta piše pod allow_url_fopen podešavanjima.

mirkan03
2.2.2010, 20:14
pod - allow_url_fopen - mi stoji = off.

Znaci nista od toga???

Ostaje mi onda Google analytics i sl?!

holodoc
2.2.2010, 20:34
pod - allow_url_fopen - mi stoji = off.

Znaci nista od toga???

Ostaje mi onda Google analytics i sl?!Što se tiče svih poziva sadržaja van servera putem ugrađenih PHP funkcija od njih se oprosti slobodno ali proveri da kojim slučajem nemaš instaliranu cURL ekstenziju. Mada to bi bilo poprilično glupo ako su već isključili onu prvu opciju. Dakle na istoj stranici potraži da kojim slučajem nemaš curl ekstenziju (samo tražiš na stranici curl). Mada opet kažem, u tvom slučaju Google Analytics bi bio mnogo bolje rešenje nego da se petljaš sa ovim glupostima.

irreal
2.2.2010, 21:33
bas kao sto sam i iz keca rekao, da proveris da li je ta funkcija dozvoljena.

nazalost, nisam mogao da ti kazem phpinfo() da koristis jer generalno uopste ne koristim php pa nisam ni znao najbolji nacin da proveris podesavanja servera (zato sam preporucio google)

Geomaster
2.2.2010, 21:48
<?php
$country = ' ';
$IP = $_SERVER['REMOTE_ADDR'];
if (!empty($IP)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'api.hostip.info/get_html.php?ip='.$IP);

//vraca zemlju kao string (povratna vrednost curl_exec
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$country = curl_exec($ch);

}
?>

holodoc
2.2.2010, 22:14
bas kao sto sam i iz keca rekao, da proveris da li je ta funkcija dozvoljena.Samo da pojasnim. file_get_contents nije ovde zabranjena već je PHP konfigurisan tako da ne dozvoljava fopen funkciji (koja je inače osnova svih wrapper funkcija za pristup resursima, lokalnim ili udaljenim) da kao argumente prima URL-ove što u principu znači da taj server ne može direktno da pristupi netu putem PHPa (osim ako nisu instalirane specijalne ekstenzije tipa curl itd.).

@Geomaster
<?php
$country = ' ';
$IP = $_SERVER['REMOTE_ADDR'];
if (!empty($IP)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'api.hostip.info/get_html.php?ip='.$IP);

//vraca zemlju kao string (povratna vrednost curl_exec
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$country = curl_exec($ch);

}
?>
Nemoj nikada da izostavljaš protkol kada navodiš argument za CURLOPT_URL parametar jer će u tom slučaju cURL pokušati da pogodi koji protokol pokušavaš da koristiš a to može da bude problematično ako na jednom te istom serveru imaš "osluškivače" za više različitih protokola tipa HTTP, FTP itd. Dakle uvek ide nešto ovog tipa:
curl_setopt($ch, CURLOPT_URL, 'http://api.hostip.info/get_html.php');

mirkan03
10.2.2010, 10:17
Hvala vam svima na pomoci. Pokusacu sa Google Analytics, pa cu od sada da se bolje respitam za hosting usluge i podesavanja servera i sl..