【问题标题】:Can microtime work differently between a unix server and a windows wamp serverunix 服务器和 windows wamp 服务器之间的 microtime 工作方式可以不同吗
【发布时间】:2013-07-01 23:59:52
【问题描述】:

我有以下代码行

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

$timestamp 被附加到订单 ID 的末尾以使其更加独特,但是,当我在本地 Wamp 服务器(在 Windows 操作系统上)上进行测试时,我得到了这样的值

-166776478
-166701036

作为测试,我在 unix 上的测试服务器上进行了订购,我得到了这样的值

1372722035
1372722471

对于每个中的最后一个,我所做的是打开 2 个 firefox 窗口并几乎同时执行订单(我的本地 wamp 服务器需要更长的时间,因为我没有任何缓存

现在,奇怪的是,我期望本地 Wamp 服务器上的值与测试服务器上的值大致相同

据我了解,microtime() 返回自 Unix 纪元以来的当前 Unix 时间戳,以微秒为单位,因此时区设置不应该有任何影响

我想知道如果 microtime 不在 unix 上运行,它会得到不同的值吗?如果不是,为什么我会得到 2 个非常不同的值

【问题讨论】:

  • php 的 uniqid() 有什么问题
  • @Dagon 不知道,系统是由其他人完成的,我的系统从他们发送的数据中耗尽,我猜性能因为microtime 只是在获得时间戳,而uniqid 正在返回基于时间戳的唯一值,可能需要更多处理,我可以更改它,但我想避免更改早在我之前就存在的系统,除非我真的必须这样做,无论如何,我不认为值的差异引起任何问题,所以这只是好奇

标签: php windows unix timestamp microtime


【解决方案1】:

我猜发生的事情是,在 Windows 机器上,您正在溢出可以表示为整数的最大值。

在两个环境中检查 PHP_INT_MAX 的值 (echo PHP_INT_MAX;) 这个问题可能与 windows 与 linux 的关系不大,而与 32 位与 64 位的关系更大。

【讨论】:

  • 是的,这似乎是问题所在,而我安装 wamp 的机器和测试服务器都是 64 位操作系统,PHP_INT_MAX 的值不同,我认为原因是我可能有一个 32 位版本的 wamp,因此可以在 64 位 Windows 7 上使用
猜你喜欢
  • 1970-01-01
  • 2010-09-29
  • 2015-05-24
  • 1970-01-01
  • 2012-08-20
  • 2013-07-10
  • 1970-01-01
  • 2018-01-11
  • 2014-04-26
相关资源
最近更新 更多