mgutt
26.06.2009, 19:33:30
Hi,
ich bin gerade etwas verwirrt. Warum ergibt das drei verschiedene Ergebnisse:
$ip = gethostbyname('www.example.com');
$long = ip2long($ip);
$sinteger = intval($long);
$unsigned = sprintf('%u', ip2long($ip));
$integer = intval($unsigned);
if ($long == -1 || $long === FALSE) {
echo 'Ungültige IP, versuchen Sie es noch einmal';
} else {
echo $ip . "<br />\n"; // 208.77.188.166
echo $long . " > " . long2ip($long) . "<br />\n"; // -800211802 IP korrekt
echo $sinteger . " > " . long2ip($sinteger) . "<br />\n"; // -800211802 IP korrekt
echo $unsigned . " > " . long2ip($unsigned) . "<br />\n"; // 3494755494 IP korrekt
echo $integer . " > " . long2ip($integer) . "<br />\n"; // 2147483647 IP falsch
}
Warum sind long, unsigned und integer alle unterschiedlich. unsigned und integer vermutlich weil ich ein 32Bit-System einsetze, aber long und unsigned verstehe ich nicht. Liegt das auch an meinem 32Bit-System?
Ich wollte auf diese Art einen möglichst schnellen Integer-Vergleich in der MySQL-Datenbank realisieren. Soll ich statt unsigned dafür lieber sinteger nehmen und meine Datenbank von INT(10) unsigned auf INT(10) umstellen? Wie halte ich das später kompatibel zu 64 Bit?
EDIT:
Ok hängt mit 32Bit zusammen. Bleibt nur noch mein Datenbankproblem.
ich bin gerade etwas verwirrt. Warum ergibt das drei verschiedene Ergebnisse:
$ip = gethostbyname('www.example.com');
$long = ip2long($ip);
$sinteger = intval($long);
$unsigned = sprintf('%u', ip2long($ip));
$integer = intval($unsigned);
if ($long == -1 || $long === FALSE) {
echo 'Ungültige IP, versuchen Sie es noch einmal';
} else {
echo $ip . "<br />\n"; // 208.77.188.166
echo $long . " > " . long2ip($long) . "<br />\n"; // -800211802 IP korrekt
echo $sinteger . " > " . long2ip($sinteger) . "<br />\n"; // -800211802 IP korrekt
echo $unsigned . " > " . long2ip($unsigned) . "<br />\n"; // 3494755494 IP korrekt
echo $integer . " > " . long2ip($integer) . "<br />\n"; // 2147483647 IP falsch
}
Warum sind long, unsigned und integer alle unterschiedlich. unsigned und integer vermutlich weil ich ein 32Bit-System einsetze, aber long und unsigned verstehe ich nicht. Liegt das auch an meinem 32Bit-System?
Ich wollte auf diese Art einen möglichst schnellen Integer-Vergleich in der MySQL-Datenbank realisieren. Soll ich statt unsigned dafür lieber sinteger nehmen und meine Datenbank von INT(10) unsigned auf INT(10) umstellen? Wie halte ich das später kompatibel zu 64 Bit?
EDIT:
Ok hängt mit 32Bit zusammen. Bleibt nur noch mein Datenbankproblem.