0

次のコード行があります

$timestamp = '-'.(int)(microtime(true)*1000);

$timestamp注文IDの最後に追加してより一意にしますが、ローカルのWampサーバー(Windows OS上)でテストしている間、このような値を取得していました

-166776478
-166701036

テストとして、UNIX 上のテスト サーバーに行って注文したところ、次のような値が得られました。

1372722035
1372722471

それぞれの最後の1つは、2つのFirefoxウィンドウを開いて、ほぼ同時に注文を行うことでした(キャッシュがなかったので、ローカルのワンプサーバーは少し時間がかかりました

さて、奇妙なことは、ローカルの Wamp サーバーの値がテスト サーバーの値とほぼ同じになると予想していたことです。

私の理解microtime()では、Unix エポック以降の現在の Unix タイムスタンプがマイクロ秒単位で返されるため、タイムゾーンの設定は影響しません。

UNIXで実行されていない場合、マイクロタイムは異なる値を取得するのでしょうか。そうでない場合、なぜ2つの非常に異なる値を取得するのですか

4

1 に答える 1

2

私の推測では、Windows マシンでは、整数として表現できる最大値をオーバーフローしています。

両方の環境で PHP_INT_MAX の値を確認してください ( echo PHP_INT_MAX;) この問題は、おそらく Windows と Linux の関係が少なく、32 ビットと 64 ビットの関係が大きいでしょう。

于 2013-07-02T02:54:35.480 に答える