Hallo und guten Morgen,
Jau! So war das gemeint. Ich benötige alle 32 Bit vorzeichenlos.
Warum? Ob das Vorzeichen gesetzt ist oder nicht ist doch auch nur ein Bit. Statt 3758096384 ist es dann halt -536870912, die Information bleibt erhalten.
Habe ich auch gedacht, aber in meinem Testscript scheint php das anders zu sehen. Die Umwandlung lässt sich scheinbar nicht wieder umkehren ( long2ip() ).
In deinem Test-Script machst du einen Shift um 8 Bit nach rechts. Warum du das machst bzw was du damit erreichen willst, kann ich nicht beurteilen, aber ich kann dir sagen, dass damit nicht unbedingt eine gültige IP bei rauskommt: im wesentlichen setzt du damit die erste Ziffer auf 0.
Genau! Ich setze damit das erste Oktett auf null, aber nur, wenn die Funktionen alle so funktionieren, wie sie beschrieben sind!
Versuch nochmal mit mehr IPs:
<?php ### op2long.php ### utf-8 ### äöüÄÖÜ
header('Content-Type: text/plain');
$_ip[] = '255.255.255.255';
$_ip[] = '127.0.0.1';
$_ip[] = '224.13.14.15';
$_ip[] = '192.168.178.5';
foreach ($_ip as $key => $dotted)
{
$iplong = ip2long($dotted);
$rshift = $iplong >> 8;
$ipv4 = long2ip($rshift);
if ($iplong === FALSE)
{
echo "false:\t";
}
else
{
echo "true: \t";
}
echo "$dotted \t $iplong \t $rshift \t $ipv4 \r\n";
}
?>
ergibt:
true: 255.255.255.255 -1 -1 255.255.255.255
true: 127.0.0.1 2130706433 8323072 0.127.0.0
true: 224.13.14.15 -536015345 -2093810 255.224.13.14
true: 192.168.178.5 -1062686203 -4151118 255.192.168.178
Was möchtest du mit dem Script denn erreichen?
Das ordnungsmäße bzw. erwartungsgemäße Arbeiten der Funktionen überprüfen.
Später soll dann der Vergleich damit durchgeführt werden.
Grüße
TS