PHP の crc32 はどのような落とし穴に遭遇しますか?どうやって解決すればいいでしょうか?この記事では、PHPのcrc32関数を使用する際に注意すべき点を中心に紹介します。 crc32を使用する皆様の参考になれば幸いです。
数日前にテーブル分割プログラムを書きました。使用するハッシュ アルゴリズムは crc32 です。テーブル分割関数は次のとおりです:
function _getHash($username) { $hash = crc32($username) % 512; return $hash; } function _getTable($username) { $hash = self::_getHash($username); return 'user_' . $hash; }
まず、ローカルの 32 ビット ウィンドウ マシン上でデータを生成し、挿入します。それを対応するテーブルに追加します。しかし、プログラムとデータをサーバー(Linuxの場合は64)に転送すると、データが見つからないことがわかりました。調査の結果、サーバー上の crc32 結果がローカルのものと異なることが判明しました。 PHP マニュアルを確認したところ、crc32 インターフェイスがこのマシンに関連していることがわかりました。
PHP マニュアルの説明:
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.
crc32 によって返される結果は 32 ビット マシンではオーバーフローするため、結果は負の数になる可能性があります。 64 ビット マシンではオーバーフローがないため、常に正になります。
CRC アルゴリズムは語長のビット数に基づいて計算されます。
crc32 関数は、php の 2 つの定数参照に従って PHP_INT_SIZE と PHP_INT_MAX を計算します
これら 2 つの定数の定義:
整数の語長はプラットフォームに依存しますが、最大値は通常約 20 億 (32-ビット符号付き)。 PHP は符号なし整数をサポートしていません。整数値の語長は定数 PHP_INT_SIZE で表すことができます。PHP 4.4.0 および PHP 5.0.5 以降では、最大値は定数 PHP_INT_MAX で表すことができます。
出力 PHP_INT_SIZE: 4、PHP_INT_MAX: 2147483647 (32 ビット出力)
PHP_INT_SIZE: 8、PHP_INT_MAX: 9223372036854775807 (64 ビット出力)
php は文字列の 32 ビット CRC を計算します 関数 crc32 ()
以上がPHP crc32 の落とし穴ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。