我网站的一位用户前几天报告了一个错误,所以我查看了日志并进行了追踪。错误是:
Undefined offset: 1
导致此错误的相关代码是:
$parts = explode('.', microtime(true));
$nonce = base_convert($parts[1], 10, 36);
所以 $parts[1] 基本上是未定义的。这会不会是因为当调用 microtime 时恰好它是一个精确的秒,所以它返回一个没有任何小数位的 int?
最佳答案
快速测试可以证实您的假设:
<?php
while (true) {
$microtime = microtime(true);
$tmp = explode('.', $microtime, 2);
if (sizeof($tmp) === 1) {
var_dump($microtime);
break;
}
}
打印
float(1508171125)
在我的系统上。所以是的,microtime
可以返回一个“整数”。
如果您考虑一下,这是有道理的,整数不需要逗号分隔符。
为了创建 nonce 值,我建议使用 random_bytes()
(如果您使用的是 PHP7)或 openssl_random_pseudo_bytes()
这比 microtime
安全多了.
关于php - 即使将 return as float 设置为 true,PHP 函数 microtime 能否返回一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46774848/