ホームページ  >  記事  >  バックエンド開発  >  PHP 組み込み関数の 32 ビットおよび 64 ビット プラットフォームの互換性の問題_PHP チュートリアル

PHP 組み込み関数の 32 ビットおよび 64 ビット プラットフォームの互換性の問題_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 14:55:35931ブラウズ

Bangkejia (www.Bkjia.com) チュートリアル PHPの整数はC言語のlong型で符号付きであり、最大値は2^31です。 64 ビット プラットフォームでは、long は 2^63 に達することがあります。

この場合、一部の PHP 関数の出力結果はさまざまなプラットフォーム上で不整合になります。

php -r "echo ip2long('255.255.255.255');" 64 ビット プラットフォームでは 4294967295、32 ビット プラットフォームでは -1 です。たとえば、ファイルサイズが 2G より大きい場合、プラットフォームが異なると結果に一貫性がなくなります。

この問題の解決策は簡単で、sprintf("%u", filesize($file)) で結果を文字列に変換します。結果が同じになるのはなぜですか。符号なし数値 4294967295 の 2 の補数は、符号付き数値 -1 の 2 の補数と同じです。同様に、戻り値が int で、最終結果が 2^31 より大きくなる可能性がある関数は、この方法で処理する必要があります。

返される文字列は文字列ですが、四則演算を実行すると PHP が自動的に変更することに注意してください。数値が 2^31 より大きい場合は int に変換され、それより大きい場合は double に変換されます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/364353.html技術記事 LieHuo.Net チュートリアル PHP の整数は、C 言語の Long 型であり、符号付きであり、最大値は 2^31 です。 64 ビット プラットフォームでは、long は 2^63 に達する可能性があります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。