Einzelnen Beitrag anzeigen
  #1  
Alt 26.06.2009, 18:33:30
mgutt mgutt ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 65
ip2long(), unsigned und intval()

Hi,

ich bin gerade etwas verwirrt. Warum ergibt das drei verschiedene Ergebnisse:
Code:
$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.
__________________
meine Scripte

Geändert von mgutt (30.06.2009 um 19:24:31 Uhr)
Mit Zitat antworten