前几天,我网站的一位用户报告了一个错误,所以我查看了日志并找到了它。错误是:
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;
}
}
Prints
float(1508171125)
在我的系统上。所以是的,microtime
可以返回一个“整数”。
如果您考虑一下,这是有道理的,整数不需要逗号分隔符。
为了创建随机数值,我建议使用random_bytes()
(如果您使用的是 PHP7)或openssl_random_pseudo_bytes()
这比microtime
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)