a non numeric value encountered in php

Я хочу просчитать общую длительность плейлиста с Youtube.
Подгружаю каждое видео по-отдельности и пытаюсь суммировать это всё в секундах(код ниже).

Возникает такая ошибка: A non-numeric value encountered. Ругается на последнюю строчку кода: $duration += ISO8601ToSeconds($video->contentDetails->duration); .

Новые ошибки уровней E_WARNING и E_NOTICE были добавлены при использовании некорректных строк с операторами, ожидающими числа (+ * / ** % > | & ^) и их эквивалентами с присваиванием. Ошибка уровня E_NOTICE выдается, когда строка начинается с цифр, но далее содержит не цифровые символы, и ошибка уровня E_WARNING выдается тогда, когда строка вообще не содержит цифр.

Результат выполнения данного примера:

Предупреждение при переполнении экранированной восьмеричной последовательности

Ранее 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.»

Recently updated to PHP 7.1 and start getting following error

Warning: A non-numeric value encountered in on line 29

Here is what line 29 looks like

On localhost all works fine..

Any ideas how to tackle this or what it is ?

16 Answers 16

It seems that in PHP 7.1, a Warning will be emitted if a non-numeric value is encountered. See this link.

Here is the relevant portion that pertains to the Warning notice you are getting:

New E_WARNING and E_NOTICE errors have been introduced when invalid strings are coerced using operators expecting numbers or their assignment equivalents. An E_NOTICE is emitted when the string begins with a numeric value but contains trailing non-numeric characters, and an E_WARNING is emitted when the string does not contain a numeric value.

I’m guessing either $item[‘quantity’] or $product[‘price’] does not contain a numeric value, so make sure that they do before trying to multiply them. Maybe use some sort of conditional before calculating the $sub_total, like so:

Оцените статью
Добавить комментарий