Archief - PHP: echo laatste nummer van een IP

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Zelete

Legacy Member
Ik zit met het volgende probleem:

Ik gebruik de volgende code om simpelweg een IP-adres weer te geven:
Code:
<?php echo "UW IP ADRES IS ", $_SERVER['REMOTE_ADDR']; ?>

Als nu het IP bijvoorbeeld 192.168.0.1 zou ik willen dat hij simpelweg 1 print (het kan ook zijn dat er 2 cijfers na het . komen he). Ik ben een complete PHP-noob en heb proberen te zoeken op Google en op PHP.net maar heb niet echt een oplossing gevonden. Dus gewoon de laatste 1 of 2 cijfers van een IP printen op een webpagina :)

Met vriendelijke groeten

Incinnerator

Legacy Member
je splits het ip op basis van het punt
en neemt dan het 4de deeltje

explode functie eens opzoeken op php.net

Zelete

Legacy Member
Het werkt, merci!

Code:
<?php

$ip = $_SERVER['REMOTE_ADDR'];

$tafel = explode(".", $ip);

echo $tafel[3];

?>

Col.Kurtz

Legacy Member
$ip=$_SERVER['REMOTE_ADDR'];
$laatstestukje=array_pop(explode('.',$ip));

PerfectPC

Legacy Member
PHP:
$laatstestukje = end (explode ('.', $_SERVER['REMOTE_ADDR']));
is nog sneller en verbruikt minder (geheugenvretende) variabelen ;)

edit: hier een scriptje dat rekening houdt met proxy servers en local routers :)
PHP:
<?php
	function get_ip() {
		if (isset ($_SERVER['HTTP_X_FORWARDED_FOR'])) {
			$array = explode ('.', $_SERVER['HTTP_X_FORWARDED_FOR']);
			switch (array_shift ($array)) {
				case 10:
					return $_SERVER['REMOTE_ADDR'];
				break;
				case 172:
					if (array_shift ($array) >= 16 && array_shift ($array) <= 31) return $_SERVER['REMOTE_ADDR'];
				break;
				case 192:
					if (array_shift ($array) == 168) return $_SERVER['REMOTE_ADDR'];
				break;
				default:
					return $_SERVER['HTTP_X_FORWARDED_FOR'];
				break;
			}
		}
		else return $_SERVER['REMOTE_ADDR'];
	}
	$laatstestukje = end (explode ('.', get_ip()));
?>

dJeez

Legacy Member
De simpelste en snelste oplossing is imho anders wel de volgende :
PHP:
$laatstestuk = ip2long($ip) & 255;

killgore

Legacy Member
servi zei:
en ook de minst leesbare ;)
jah

en simpelste zouk nu toch ook niet zeggen, ge moest is weten hoeveel mensen de binaire operators niet kennen/niet verstaan :).

commentje erbij:
//put ip to a number and collect the 8 least-significant bits to get the last number from the ip

en da zullen zelfs veel mense nie verstaan.

PerfectPC

Legacy Member
dJeez zei:
Pfff, zageventen, voor mij is dat toch wel 't simpelste nèh :p.
fyi, dat verbruikt een pak meer recources as nen explode ;)
+ ge moet dat ne 2de keer runnen om uw voorlaatste set te krijgen (enne begint dat maar es leesbaar te schrijven :p)

killgore

Legacy Member
PerfectPC zei:
fyi, dat verbruikt een pak meer recources as nen explode ;)
+ ge moet dat ne 2de keer runnen om uw voorlaatste set te krijgen (enne begint dat maar es leesbaar te schrijven :p)
$laatstestuk = ip2long($ip) & (255 << 8);

das nu zo moeilijk niet :p

en meer resources betwijfel ek ook hoor :), want je gooit je functie return onmiddelijk weg, en een explode moet meer berekeningen doen.
ip2long is gemaakt voor puur met ip's te werken en zal daardoor relatief snel gaan, explode moet algemeen met strings kunnen werken en dus wel wat meer tijd nodig hebben. en de bit-operators zijn bij mijn weten nog altijd de snelste operators binnen een programmeertaal ;).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan