php - 即使将 return as float 设置为 true,PHP 函数 microtime 能否返回一个整数?

标签 php

我网站的一位用户前几天报告了一个错误,所以我查看了日志并进行了追踪。错误是:

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/

相关文章:

php - 客户端如何在ssl连接中生成公钥?

php - 更改 Monolog 中的日志路径 - Symfony2

javascript - 是否可以创建一个像按钮一样的链接,并在单击时执行某个功能?

PHP/MySQL 和 Wordpress 数据库错误 : [Unknown column '0' in 'field list' ]

php - || 到底是什么?意思是?

php - 如何使用 mysql 简单地检索 WordPress 中最近发布的帖子?

php - 使用 Laravel 5.4 从 strip 中检索订阅计划列表

php - 有没有办法使用 php 了解 mysql 服务器时区?

php - 将两个模型合并为一个数据库调用 - laravel

javascript - 将值传递给 HTML &lt;input&gt; 标记