Autor Zpráva
stepanka
Profil *
Ahoj,

nevíte prosím, jak nejlépe se dá zjistit IP adresa uživatele? Našla jsem na to jednu funkci:

function getip()
{
	if ($_SERVER) {
		if ($_SERVER[HTTP_X_FORWARDED_FOR]) {
			$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
		} elseif ($_SERVER["HTTP_CLIENT_IP"]) {
			$realip = $_SERVER["HTTP_CLIENT_IP"];
		} else {
			$realip = $_SERVER["REMOTE_ADDR"];
		}
	} else {
		if (getenv('HTTP_X_FORWARDED_FOR')) {
			$realip = getenv('HTTP_X_FORWARDED_FOR');
		} elseif (getenv('HTTP_CLIENT_IP')) {
			$realip = getenv('HTTP_CLIENT_IP');
		} else {
			$realip = getenv('REMOTE_ADDR');
		}
	}
	return $realip;
}


ale byla bych ráda, kdyby ji zhodnotili zkušenější uživatelé. Možná by se dala nějak vylepšit, upravit..

A za druhé - nevěděl by někdo, jaký je rozdíl mezi použitím funkce getenv() a superglobálním $_SERVER?

Mockrát děkuju.
fuckin
Profil
stepanka:
A za druhé - nevěděl by někdo, jaký je rozdíl mezi použitím funkce getenv() a superglobálním $_SERVER?
Je to totéž.

ale byla bych ráda, kdyby ji zhodnotili zkušenější uživatelé. Možná by se dala nějak vylepšit, upravit..
Používám jen klasické $_SERVER['REMOTE_ADDR'];. Nic víc nepotřebuji. Asi pak nejsem zkušený no.
stepanka
Profil *
fuckin:
Děkuju za reakci.

Používám jen klasické $_SERVER['REMOTE_ADDR'];. Nic víc nepotřebuji.
Mě právě ta funkce přide taky zbytečně dlouhá a složitá. Ještě jsem nenarazila na situaci, kde by byla odlišná $_SERVER["HTTP_X_FORWARDED_FOR"] a $_SERVER["REMOTE_ADDR"] adresa.

Asi pak nejsem zkušený no.
To přece nikdo netvrdí..
AM_
Profil
stepanka:
A za druhé - nevěděl by někdo, jaký je rozdíl mezi použitím funkce getenv() a superglobálním $_SERVER?
druhá větev mi přijde zbytečná, leda snad kvůli kompatibilitě s PHP 4.0 (?), ale tam by bylo lepší použít $HTTP_SERVER_VARS, což je kompatibilní mnohem dále zpět.

Mě právě ta funkce přide taky zbytečně dlouhá a složitá.
z http://ip-to-country.webhosting.info/node/view/212 :
"The reason why $REMOTE_ADDR is not considered reliable is if you're connecting through a proxy with your ISP that is on a different IP address, sometimes the proxy's IP address is what is gets put into $REMOTE_ADDR.

$HTTP_CLIENT_IP and $HTTP_X_FORWARDED_FOR are extra headers put in by some proxies to pass on the real ip address of the connecting machine (if applicable) to the web server."
Jde o to, proč IP zjišťuješ, následující dvě direktivy ti dle tohoto fóra pomohou určit IP uživatele za proxy, ale ne všechny, je to nadstandard.
stepanka
Profil *
AM:
Moc děkuji za příspěvek.

IP adresu zjišťuju kvůli bezpečnosti, takže by se mi hodilo, kdyby co nejvíce uživatelů mělo rozdílné IP adresy. Na žádném počítači, který je za proxy serverem to vyzkoušet nemůžu, ale vzhledem k tomu co píšeš, by byla nejlepší varianta té funkce asi tato, mám pravdu?

function getip()
{
  if ($_SERVER[HTTP_X_FORWARDED_FOR]) {
    $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  } else {
    $realip = $_SERVER["REMOTE_ADDR"];
  }   
  return $realip;
}
Chamurappi
Profil
Reaguji na stepanku:
by byla nejlepší varianta té funkce asi tato, mám pravdu?
Ne. Ukládej si obě zjištěné IP adresy. Počítej s tím, že si člověk sedící za proxy serverem může docela snadno vymyslet vlastní obsah hlavičky X-Forwarded-For.
stepanka
Profil *
Chamurappi:
Aha, ok, mockrát díky.
AM_
Profil
stepanka:
a nevynechával bych ani HTTP_CLIENT_IP, vzhledem k tomu, že jsou to nestandardní vlastnosti, zřejmě nebude vždy použito HTTP_CLIENT_IP a HTTP_X_FORWARDED_FOR zároveň.
A nezapomínej apostrofy:
if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
stepanka
Profil *
AM:
Super, použiju všechny tři možnosti, moc vám všem děkuju :-)
Tori
Profil
reaguji na odkaz od AM_:
podle posledního příspěvku na tom fóru může v $_SERVER['HTTP_X_FORWARDED_FOR'] být nejen jedna IP, ale i další obsah. Jak dlouhý výsek z této proměnné má smysl ukládat do db, jako součást ověření uživatele? Na druhou stranu totiž zase nechci zbytečně zvyšovat velikost db nebo používat VARCHAR (ale možná jsou to zbytečné starosti při malém počtu uživatelů?)
Díky moc za radu.
AM_
Profil
Tori:
Bohužel nevím, tuhle vlastnost jsem tu viděl poprvé a jen intuitivně jsem domyslel, k čemu je. Je asi na tvém uvážení, jak moc chceš mít spolehlivé logy, žádná kouzelná rada "kolik toho tam může být maximálně" asi není.
Hombre
Profil *
fuckin:
Ahoj štěpánko, vím že tady se to nehodí psát ale šetl jsem tvou diskuzi o impplementaci platby paypal na webu. Mohla by jsi mi poradit jak na to, nebo zda ti někdo pomohl? díky. Napis mi bud tady nebo na mejla hombre27@seznam.cz díky moc za pomoc :-). Láďa.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: