做服务器开发,肯定需要使用某种方法来统计API调用时长,来进行时间统计、优化。在PHP里,能用的函数就是microtime了,这个函数会回给你当前系统的UNIX时间戳和毫秒数。我一直在使用这个函数来统计API时长,但是,最近在统计API执行时长的时候,发现很多时间都是负数。虽然以前也有发现负数的情况出现,但是最近这次比较凶猛,一大半都是负数,逼得我不得不找下原因了。话说找原因,其实也没什么好找的,结束时间减去开始时间,这个逻辑也能错就有鬼了,只可能是原声函数给出的值的问题。

到php.net上查了下手册,发现几条有趣的comments。但是主要的意思都是说一件事情:php的microtime函数的底层是调用gettimebyday这个函数来实现的。而使用gettimebyday这个函数可能会造成时间的不正确。

而且我发现我在使用的php手册实在是太老了,microtime之前返回的是一个“micro second”格式的字符串,用户还需要自己手动来获取float数值。不过现在只要 microtime(TRUE)这样,就可以直接获取float数值了,当然不要忘记* 1000来获取毫秒值。

这里有一个第三方的PHP类,可以用来替代默认的microtime方案:http://codeaid.net/php/calculate-script-execution-time-%28php-class%29