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 に変換されます。