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() ) ;