1

我重新安装了 WAMP,现在我有 PHP 版本 7.1.9(在此之前我有 7.0 x)。

如果没有警告/通知报告,部分代码将不再工作。

 - Warning: A non-numeric value encountered in

和:

 - Notice: A non well formed numeric value encountered in

出现错误的脚本包含以下代码:

$_POST['username'] = 'yourname';
$code = md5($_POST['username'] + microtime() )  ;
var_dump($code);

我相信我的问题是由于升级我的 PHP 解释器而出现的。

将 microtime 设置为microtime(true). 当我设置$_POST['username']为数字时,错误甚至不存在。但就像我说的:我想知道是什么原因导致它以及如何解决它。

我还通读了 PHP 迁移文档,以找到有关微时间或有关 MD5 的变量的任何信息,但什么也没有。

可能是 WAMP 中的设置不同,还是 PHP 解释器中的错误?

4

1 回答 1

1

您会收到此错误,因为从 PHP7 开始,解释器在进行类型转换时会稍微松懈一些。

按部分进行,您正在尝试添加(如:使用加法运算符,++)两个值,并且您所拥有的任何$_POST['username']内容肯定不是有效数字;microtime()默认情况下,返回的也不是有效数字

在 PHP 7.1 之前,这将静默工作,解释器将在幕后执行静默类型转换,从不抱怨。但是在 PHP >= 7.1 上,您需要对类型更加小心。

使用连接运算符 ( .) 的建议解决方法有效,因为结果microtime()和内容$_POST['username']都是字符串,并且md5()无论如何都需要一个字符串作为参数。

$code = md5( $_POST['username'] . microtime() )  ;
于 2018-12-30T17:14:21.020 回答