Новые ошибки уровней E_WARNING и E_NOTICE были добавлены при использовании некорректных строк с операторами, ожидающими числа (+ — * / ** % > | & ^) и их эквивалентами с присваиванием. Ошибка уровня E_NOTICE выдается, когда строка начинается с цифр, но далее содержит не цифровые символы, и ошибка уровня E_WARNING выдается тогда, когда строка вообще не содержит цифр.
Результат выполнения данного примера:
- Предупреждение при переполнении экранированной восьмеричной последовательности
- Исправлена несогласованность $this
- Генерация идентификаторов сессий без хеширования
- Изменения в обработке INI-файлов
- Генерация идентификаторов сессий только с помощью CSPRNG
- Более информативное сообщение TypeError, если допустим NULL
- Primary tabs
- Forums:
- Решение
Предупреждение при переполнении экранированной восьмеричной последовательности
Ранее 3-октетная восьмиричная строка переполнялась никому ничего не сообщая. Теперь при переполнении будет вызвана ошибка уровня E_WARNING .
Результат выполнения данного примера:
Исправлена несогласованность $this
В то время как $this считается специальной переменной в PHP, ей не хватало специальных проверок, что ее не используют в качестве переменной и не переопределили. Теперь использовать $this в качестве пользовательской переменной запрещено. Также запрещено присваивать ей значение и использовать в глобальном пространстве имен.
Генерация идентификаторов сессий без хеширования
Идентификаторы сессий больше не хешируются во время создания. Вместе с этим удалены следующие четыре параметра из ini-файла:
- session.entropy_file
- session.entropy_length
- session.hash_function
- session.hash_bits_per_character
И добавлены два других:
- session.sid_length — определяет длину идентификатора сессии. По умолчанию используется 32 символа для обеспечения обратной совместимости.
- session.sid_bits_per_character — определяет количество бит на каждый символ идентификатора (то еть можно увеличить количество доступных для использования в идентификаторе символов). Для обратной совместимости по умолчанию используется 4 бита.
Изменения в обработке INI-файлов
Если установлено в -1, то будет использован режим dtoa. Значение по умолчанию 14.
Если установлено в -1, то будет использован режим dtoa. Теперь значение по умолчанию -1.
Значение по умолчанию для этой настройки php.ini изменено на 1, так что, по умолчанию, предупреждения libjpeg будут игнорироваться.
В PHP 7.1.2 значение по умолчанию для этой настройки php.ini изменено на 1 (включено), а в PHP 7.1.7 возвращено значение 0 (выключено)
Генерация идентификаторов сессий только с помощью CSPRNG
Идентификаторы сессий теперь создаются только с помощью CSPRNG.
Более информативное сообщение TypeError, если допустим NULL
Теперь исключение TypeError для проверок типа arg_info предоставляет более информативное сообщение об ошибке. Если тип параметра или возвращаемое значение может быть NULL (либо имеет значение NULL по умолчанию или имеет обнуляемый тип), то теперь в сообщении будет упомянуто «must be . or null» или «must . or be null.»
После установки модуля iproduct video в Opencart, модуль еле живой, в админке ругается:
Notice: A non well formed numeric value encountered in /admin/model/extension/module/iproductvideo.php on line 229
Сама строка: $val *= 1024;
После сохранения настроек:
- Вопрос задан 19 февр.
- 82 просмотра
Новые ошибки уровней E_WARNING и E_NOTICE были добавлены при использовании некорректных строк с операторами, ожидающими числа (+ — * / ** % > | & ^) и их эквивалентами с присваиванием. Ошибка уровня E_NOTICE выдается, когда строка начинается с цифр, но далее содержит не цифровые символы, и ошибка уровня E_WARNING выдается тогда, когда строка вообще не содержит цифр.
Primary tabs
Forums:
Notice: a non well formed numeric value encountered
Ошибка возникала при проведении арифметической операции с float. для перевода цены в рублях в копейки цифра умножалась на 100.
Решение
Проблема оказалась в том, что данные читались из .xslx файла c помощью библиотеки phpoffice/phpspreadsheet, и копейки были отделены запятой. Поэтому вместо float из дробных ячеек приходил string.
Решено путём замены в файле запятых на точки.
Теперь операция проходит без ошибок: