CleverCode は最近、PHP プロジェクトのプラスチック変換の問題に遭遇しました。 mysql id = 5147486396 などの、bigint で長整数を含むフィールド ID があります。ただし、php コードは歴史的な理由により複数のマシンにデプロイされており、そのうちマシン A は 32 ビット システム、マシン B は 64 ビット システムです。ここでの問題は、64 ビット システムではページ アクセスが正常に行われることです。 32ビットシステムでのアクセスエラー。原因はPHPシェーピングオーバーフローです。
#getconf LONG_BIT
<?php $id = 5147486396; echo '$id:'.$id."\r\n"; $value = (int)$id; echo '(int)$id:'.$value."\r\n"; $value = intval($id); echo 'intval($id):'.$value."\r\n"; $value = filter_var($id, FILTER_VALIDATE_INT); echo 'filter_var($id, FILTER_VALIDATE_INT):'."\r\n"; var_dump($value); ?>
(int)5147486396的结果是852519100,intval(5147486396)的结果是852519100,filter_var(5147486396, FILTER_VALIDATE_INT)结果是false。
#getconf LONG_BIT
<?php $id = 5147486396; echo '$id:'.$id."\r\n"; $value = (int)$id; echo '(int)$id:'.$value."\r\n"; $value = intval($id); echo 'intval($id):'.$value."\r\n"; $value = filter_var($id, FILTER_VALIDATE_INT); echo 'filter_var($id, FILTER_VALIDATE_INT):'."\r\n"; var_dump($value); ?>
(int)5147486396的结果是5147486396,intval(5147486396)的结果是5147486396,filter_var(5147486396, FILTER_VALIDATE_INT)结果是5147486396。
整数の語長プラットフォームに依存しますが、通常、最大値は約 20 億 (32 ビット符号付き) です。 64 ビット プラットフォームの最大値は通常、9E18 程度です。 PHP は符号なし 整数 をサポートしていません。 整数 値の語長は 定数 PHP_INT_SIZE で表すことができます。PHP 4.4.0 および PHP 5.0.5 以降では、最大値は定数 PHP_INT_MAX
以上がPHP 32 ビット システムにおける長整数強制変換オーバーフローの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。