md5($_POST['username'] + microtime()) говорит, что обнаружил не числовое значение с новой версии php

Я переустановил WAMP и теперь у меня PHP версии 7.1.9 (до этого у меня было 7.0 x).

Часть кода больше не работает без предупреждений / уведомлений.

 - Warning: A non-numeric value encountered in

А также:

 - Notice: A non well formed numeric value encountered in

Скрипт с ошибкой содержит следующий код:

<?php $_POST['username'] = 'yourname';


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


var_dump($code); ?>

Я прочитал вопросы об ошибках, но это не подходящие ответы для моей ситуации. Моя ситуация больше связана с тем, что у меня теперь есть новая версия, что приводит к этой ошибке и не имеет никаких проблем в старой версии php. Я скорее даю эту дополнительную информацию, потому что за меня не проголосовали из-за моих прежних сообщений, что удерживает меня от публикации чего-либо. (но это цель не голосование не так ли?):)

У меня были лучшие результаты с настройкой microtime на microtime(true), Ошибок даже нет, когда я устанавливаю $_POST['username'] на номер. Но, как я уже сказал: я хочу знать, что является причиной и как ее решить.

Я также прочитал документы по переносу php, чтобы найти что-нибудь о microtime или переменных, касающихся md5, может быть, но ничего.

Может быть, настройки в Wamp отличаются или это может быть ошибка в php или около того?

Кто-нибудь знает, что вызывает эту проблему?

1 ответ

Вы должны написать строку как:

<?php 
$_POST['username'] = 'yourname';
$code = md5( $_POST['username'] . microtime() )  ;
var_dump( $code ); ?>

Вы получаете эту ошибку, потому что, начиная с PHP7, интерпретатор немного менее гибок при выполнении преобразования типов.

Идя по частям, вы пытаетесь добавить (как в: с помощью оператора сложения, ++) два значения и все, что у вас есть в $_POST['username'] безусловно, недействительный номер; и возвращение microtime()по умолчанию также не является допустимым числом.

До PHP 7.1 это работало в режиме без вывода сообщений, а интерпретатор выполнял скрытное приведение типов за кулисами, никогда не жалуясь. Но в PHP >= 7.1 вам нужно быть немного осторожнее с типами.

Предлагаемый способ использования оператора конкатенации (.) работает из-за результата microtime() и содержание $_POST['username'] обе строки, и md5() в любом случае ожидает строку в качестве параметра.

$code = md5( $_POST['username'] . microtime() )  ;
Другие вопросы по тегам