ホームページ >バックエンド開発 >PHPチュートリアル >win7x64とcentosでintvalの最大値の範囲が異なる問題
私は開発に win7x64 を使用しており、Web サーバーは php5.5 の組み込み Web サーバーを使用しています。
昨日、同じコードが win7 と centos で異なる結果になることに気づきました。
var_dump(intval(') 21474836470')) ;
Win7 での出力: int 2147483647
Centos での出力: int 30000000000
マニュアルには次のように記載されています:
最大値はオペレーティング システムによって異なります。 32 ビット システムでの符号付き整数の最大範囲は、-2147483648 ~ 2147483647 です。
64 ビット システムでは、符号付き整数値の最大は 9223372036854775807 です。
しかし、私のシステムは win7x64 です。ダウンロードした php は検証済みで、64 ビット バージョンです。
intval が 32 ビットであるように見えるのはなぜですか? ? ?
Windows の下の phpinfo を見ると、それが 64 ビットであることもわかります:
PHP バージョン 5.5.14
システム Windows NT 7D494368868AFA1 6.1 ビルド 7601 (Windows 7 Ultimate Edition Service Pack 1) AMD64
ビルド日 2014 年 6 月 25 日 12: 37:32
コンパイラー MSVC11 (Visual C++ 2012)
アーキテクチャ x64
これは、オペレーティング システムのバージョンだけでなく、PHP のバージョンにも依存します。 公式の PHP バージョンは次のとおりです。すべて 32 ビット
64 ビット バージョンは php5.5 以降のみ、その他は 32 ビットです
php5.5 以降のみ 64 ビット バージョンがあり、その他は 32 ビットです
誰か知っていますか? ? ?
皆さんは Win または Linux のみで開発していますか?
開発に64ビット版を使用する必要があるかどうかは、動作環境によって異なります。
そうしないと、64 ビット サーバーが見つからないため、プロジェクトは中止されます
さらに、64 ビット システムは、真のシステムと偽のシステムに分けられます。64 ビット アーキテクチャを備えた 64 ビット システムと、32 ビット アーキテクチャを備えた 64 ビット システムです。ビット アーキテクチャ (32 ビット システムでは 32 ビット、および準 32 ビットと呼ばれます)
さらに、発生した問題はバグである可能性があります (バグ Web サイトで確認できます)。現在は 5.6.9 である可能性があります。それは修正されましたか?
開発に 64 ビット版を使用する必要があるかどうかは、動作環境によって異なります。
そうしないと、64 ビット サーバーが見つからないため、プロジェクトは中止されます
さらに、64 ビット システムは、真のシステムと偽のシステムに分けられます。64 ビット アーキテクチャを備えた 64 ビット システムと、32 ビット アーキテクチャを備えた 64 ビット システムです。ビット アーキテクチャ (32 ビット システムでは 32 ビット、および準 32 ビットと呼ばれます)
さらに、発生した問題はバグである可能性があります (バグ Web サイトで確認できます)。現在は 5.6.9 である可能性があります。それは修正されましたか?
また、私が尋ねた質問には間違いがありますが、問題は編集できないはずです。 :
var_dump(intval('30000000000' ; .php.net/bug.php?id=69704
PHP は、マシンの影響を受けない高精度の数値演算関数ライブラリを提供しており、数億桁 (数億ではなく 10 桁のみ) の数値も計算できます
実際、たとえそれができたとしても。は 64 ビット整数をサポートしていますが、演算結果が 64 ビット整数を超えた場合は、まだ危険が潜んでいます。
64 ビットの有効な値の範囲は、少なくとも 10 年先になると推定されており、その日に会えるかどうかさえわかりませんが、笑
自動インクリメント ID の場合、MySQL は 64 ビット整数である BIGINT 自体を提供します。
自動インクリメント ID は単なる識別子であり、数学的には関与しません。
自動インクリメント ID の場合、MySQL は 64 ビット整数である BIGINT 自体を提供します。これは PHP で文字列として処理できます。はい、以前の処理では文字列を intval で変換し、それが数値であるかどうかを判断します。は数値であり、SQL クエリに参加します