Heim  >  Artikel  >  Backend-Entwicklung  >  PHP crc32 Fallstricklösung

PHP crc32 Fallstricklösung

*文
*文Original
2017-12-27 09:42:494738Durchsuche

Auf welche Fallstricke wird crc32 von PHP stoßen? Wie kann man es lösen? In diesem Artikel werden hauptsächlich die Probleme vorgestellt, die bei der Verwendung der crc32-Funktion von PHP beachtet werden müssen. Ich hoffe, dass es für alle, die crc32 verwenden, hilfreich sein wird.

Ich habe vor ein paar Tagen ein Tabellenaufteilungsprogramm geschrieben. Der verwendete Hash-Algorithmus ist wie folgt:

function _getHash($username)
    {
        $hash = crc32($username) % 512;
        return $hash;
    }

    function _getTable($username)
    {
        $hash = self::_getHash($username);
        return 'user_' . $hash;
    }



Generieren Sie zunächst die Daten auf der lokalen 32-Bit-Fenstermaschine und fügen Sie sie in die entsprechende Tabelle ein. Als ich jedoch das Programm und die Daten auf den Server (64 für Linux) übertrug, stellte ich fest, dass die Daten nicht gefunden werden konnten. Bei der Untersuchung wurde festgestellt, dass sich die crc32-Ergebnisse auf dem Server von denen lokal unterschieden. Nachdem ich das PHP-Handbuch erneut überprüft hatte, stellte ich fest, dass die crc32-Schnittstelle mit der Maschine zusammenhängt.
Beschreibung des PHP-Handbuchs:

Because PHP's integer type is signed many crc32 checksums will result in negative integers on 32bit platforms. On 64bit installations all crc32() results will be positive integers though.


Das von crc32 zurückgegebene Ergebnis läuft auf einem 32-Bit-Computer über, sodass das Ergebnis möglicherweise eine negative Zahl ist. Auf einem 64-Bit-Computer gibt es keinen Überlauf, daher ist er immer positiv.

Der CRC-Algorithmus wird basierend auf der Anzahl der Bits in der Wortlänge berechnet.

Die crc32-Funktion berechnet PHP_INT_SIZE und PHP_INT_MAX gemäß den beiden Konstantenreferenzen in PHP
Die Definition dieser beiden Konstanten:
Die Wortlänge der Ganzzahl ist plattformabhängig, obwohl sie maximal ist Der Wert beträgt normalerweise etwa zwei Milliarden (32-Bit mit Vorzeichen). PHP unterstützt keine vorzeichenlosen Ganzzahlen. Die Wortlänge eines Integer-Wertes kann durch die Konstante PHP_INT_SIZE dargestellt werden. Seit PHP 4.4.0 und PHP 5.0.5 kann der Maximalwert durch die Konstante PHP_INT_MAX dargestellt werden.
Ausgabe PHP_INT_SIZE: 4, PHP_INT_MAX: 2147483647 in 32 Bit
PHP_INT_SIZE: 8, PHP_INT_MAX: 9223372036854775807 in 64 Bit 🎜>Verwandte Empfehlungen. :


php-Funktion crc32() zur Berechnung des 32-Bit-CRC einer Zeichenfolge

CRC32, Es ist leicht, damit umzugehen?

So verwenden Sie die crc32-Funktion in PHP, um Daten zu überprüfen

Das obige ist der detaillierte Inhalt vonPHP crc32 Fallstricklösung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn