IP verkürzen
September 2009
Wenn man aus irgend einem Grund viele IPs sammelt, würde es sich anbieten, diese zu verkürzen.
Mit einem kurzen Skript kann man eine IPv4 von durchschnittlich 12 Zeichen auf 8 oder gar 6 ohne Informationsverlust beschränken.
Im folgenden Skript werden die dezimalen Bestandteile der IP in hexadezimale, zweistellige Zahlen umgewandelt, wodurch die Punkte weggelassen werden können.
Wenn es die Umstände erlauben, können die Teile der IP auch als Zeichencode interpretiert und mit chr() in das entsprechende Zeichen umgewandelt werden, womit die IP nun nur noch eine Länge von vier Bytes besitzt. [1]
Doch gibt es hierbei einen Trick, um dieses Problem zu umgehen, indem man sich Base64 zu Nutze macht. So werden die vier Bytes in 100% darstellbare Zeichen umgewandelt.
Siehe auch:
[1] In der Realität besteht die IP nur aus vier Bytes, sie wird jedoch zur Leserlichkeit in vier mit Punkten getrennte Zahlen umgewandelt, wobei jede Zahl für ein Byte steht.
Mit einem kurzen Skript kann man eine IPv4 von durchschnittlich 12 Zeichen auf 8 oder gar 6 ohne Informationsverlust beschränken.
Im folgenden Skript werden die dezimalen Bestandteile der IP in hexadezimale, zweistellige Zahlen umgewandelt, wodurch die Punkte weggelassen werden können.
<?php
$ip = '123.45.67.89';
$ip_split = explode('.', $ip);
foreach($ip_split as &$split){
$split = dechex($split);
if(strlen($split)===1)
$split = '0'.$split;
}
$ip_hex = implode('', $ip_split);
echo $ip_hex;
# Ausgabe: 7b2d4359
?>
Und aus 127.0.0.1 wird 7f000001.Wenn es die Umstände erlauben, können die Teile der IP auch als Zeichencode interpretiert und mit chr() in das entsprechende Zeichen umgewandelt werden, womit die IP nun nur noch eine Länge von vier Bytes besitzt. [1]
<?php
$ip = '123.45.67.89';
$ip_split = explode('.', $ip);
$ip_split = array_map('chr', $ip_split);
$ip = implode('', $ip_split);
echo $ip;
# Ausgabe: {-CY
?>
Bei 127.0.0.1 würden hier zwei Null-Bytes entstehen. Diese Tatsache kann in manchen Situationen zu Problemen führen...Doch gibt es hierbei einen Trick, um dieses Problem zu umgehen, indem man sich Base64 zu Nutze macht. So werden die vier Bytes in 100% darstellbare Zeichen umgewandelt.
<?php
...
$ip = base64_encode($ip);
echo $ip;
# Ausgabe: ey1DWQ==
?>
Nun, wer das Prinzip von Base64 kennt, weiss was die beiden Gleich-Zeichen am Ende bedeuten, und er wird auch verstehen, warum man sie abschneiden kann, ohne dass dabei Daten verloren gehen.<?php
...
$ip = substr($ip, 0, -2);
echo $ip;
# Ausgabe: ey1DWQ
?>
Auf diese Weise kann jede IP-Adresse auf genau sechs Zeichen verkürzt werden.Siehe auch:
[1] In der Realität besteht die IP nur aus vier Bytes, sie wird jedoch zur Leserlichkeit in vier mit Punkten getrennte Zahlen umgewandelt, wobei jede Zahl für ein Byte steht.

Andere Einträge
- Umlautproblem
- is_utf8() – auf UTF-8 prüfen
- Dateiendung erkennen
- mb_strrev - Multibyte-String umkehren
- Mehrere verschiedene Zufallszahlen
Kommentare
#1
von Jakob Rohländer am 09.06.2014
Ich würde wenn ich die IP Adressen von Nutzern speichern würde, nur als Hash speichern.