none
在IIS7.5上跑PHP 时间函数返回unix时间戳的微秒数怎么都是一样的啊!!! RRS feed

  • 问题

  • 用的是万网的云主机

    系统是server 2008 R2 sp1

    CPU E5 2430

    IIS7.5

    用webPI在线安装的PHP环境,基本都能正常使用,但唯独一个小问题一直都无法解决。

    问题描述:

    <?php
            echo microtime()."<br>";
    	echo microtime()."<br>";
    	sleep(2);
    	echo microtime()."<br>";
    	echo microtime()."<br>";
    	sleep(2);
    	echo microtime()."<br>";
    	echo microtime()."<br>";
    
    ?>

    这么一个简单的语句,输出的结果是:

    0.65196800 1370406360
    0.65196800 1370406360
    0.65196800 1370406362
    0.65196800 1370406362
    0.65196800 1370406364
    0.65196800 1370406364

    为什么输出的微妙数都是一样的。

    php版本换过了,也还是这样。

    但是我在另一台云主机上试过了,输出结果微妙数就会不一样。

    感觉不像是php的问题,像是IIS的问题,求高手给个解答。

    2013年6月5日 4:35

答案

全部回复

  • 有趣的问题!

    能把你的环境、搭建步骤、重现问题的步骤,完整写出来,以便其他人试着重现这个问题吗?


    Technical problem is never a problem.

    2013年6月5日 7:32
  • 我也在一台机器上用WebPI装了一下最新的PHP,跑下来输出结果是下面这样的,这符合你的预期结果吗?

    0.19712500 1370423317
    0.19712500 1370423317
    0.20952900 1370423319
    0.20952900 1370423319
    0.22193300 1370423321
    0.22193300 1370423321

    你那边两台机器跑phpinfo(),输出结果有明显差异吗?

    然后,你怀疑是IIS问题,那么你脱离IIS,用php.exe独立运行php页面代码,得到怎样的结果?我得到的是这样的:

    C:\Program Files (x86)\PHP\v5.4>php.exe d:\php\index.php
    0.55815800 1370424360<br>0.55815800 1370424360<br>0.57056200 1370424362<br>0.570
    56200 1370424362<br>0.58296500 1370424364<br>0.58296500 1370424364<br>


    Technical problem is never a problem.



    • 已编辑 Finy 2013年6月5日 9:27
    2013年6月5日 9:09
  • 看来不是iis的问题,难道是操作系统、CPU的问题?

    云服务器也都是虚拟出来的,这和虚拟技术会有关?


    • 已编辑 soultree 2013年6月5日 14:48
    2013年6月5日 14:47
  • 我想问一下,你把这段代码多拷贝几段,Sleep可以改短点,比如1秒,弄个十几二十遍,输出里面的msec还都是一样的吗?

    另外,既然你是php5,换着试试microtime(true),输出的小数点部分也都一样吗?

    再有,你把sleep(2)改为usleep(700),看看等待非整数秒后,msec还相同吗?


    Technical problem is never a problem.



    • 已编辑 Finy 2013年6月6日 3:36
    2013年6月6日 2:41
  • 去php.net搜了一下

    https://bugs.php.net/bug.php?id=64633

    看来是有个问题,只能等大神去修复或者改进了。

    同时谢谢finy给出的意见和建议!

    • 已标记为答案 soultree 2013年6月6日 12:21
    2013年6月6日 12:21
  • 这个问题,试试看运行一下ClockRes这个工具,看看你这系统支持多大的时间分辨率?

    http://technet.microsoft.com/en-us/sysinternals/bb897568.aspx


    Technical problem is never a problem.

    2013年6月18日 10:29
  • 服务器上运行的结果

    Maximum timer interval: 15.625 ms
    Minimum timer interval: 0.500 ms
    Current timer interval: 15.625 ms

    这个状况该如何解决?是硬件引起的?

    2013年7月1日 5:07