PHPのcrc32関数を使う際の注意点(そうでないと落とし穴になります)、crc32関数_PHPチュートリアル

WBOY
リリース: 2016-07-13 09:56:22
オリジナル
985 人が閲覧しました

phpのcrc32関数を使うときに注意すべきこと(そうしないと落とし穴になります) crc32関数

使用するハッシュアルゴリズムはcrc32です。テーブル分割関数は次のとおりです:
コードをコピーします コードは次のとおりです:
関数_getHash($ユーザー名)
{
$hash = crc32($username) % 512;
戻り $hash;
}

関数_getTable($username)
{
$hash = self::_getHash($username);
'user_' を返します。
}

まず、ローカルの 32 ビット ウィンドウ マシン上でデータを生成し、対応するテーブルに挿入します。しかし、プログラムとデータをサーバー(64はLinux)に転送したところ、データが見つからないことがわかりました。調査の結果、サーバー上の crc32 の結果がローカルの結果と異なることが判明しました。 PHPのマニュアルを再度確認したところ、crc32インターフェースがこのマシンに関係していることが分かりました。
PHPマニュアルの説明:
コードをコピーします コードは次のとおりです:
PHP の整数型は符号付きであるため、32 ビット プラットフォームでは多くの crc32 チェックサムは負の整数になりますが、64 ビット インストールではすべての crc32() の結果は正の整数になります。
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 で表すことができます。
次の 32 ビットを出力 PHP_INT_SIZE: 4、PHP_INT_MAX: 2147483647
出力 PHP_INT_SIZE: 8、PHP_INT_MAX: 9223372036854775807

(64 ビット)

http://www.bkjia.com/PHPjc/987896.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/987896.html技術記事 PHP の crc32 関数を使用するときに注意する必要があること (そうしないと落とし穴になります) crc32 関数は、使用されるハッシュ アルゴリズムは次のとおりです。コード コード...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート