Я хочу просчитать общую длительность плейлиста с Youtube.
Подгружаю каждое видео по-отдельности и пытаюсь суммировать это всё в секундах(код ниже).
Возникает такая ошибка: A non-numeric value encountered. Ругается на последнюю строчку кода: $duration += ISO8601ToSeconds($video->contentDetails->duration); .
Новые ошибки уровней E_WARNING и E_NOTICE были добавлены при использовании некорректных строк с операторами, ожидающими числа (+ — * / ** % > | & ^) и их эквивалентами с присваиванием. Ошибка уровня E_NOTICE выдается, когда строка начинается с цифр, но далее содержит не цифровые символы, и ошибка уровня E_WARNING выдается тогда, когда строка вообще не содержит цифр.
Результат выполнения данного примера:
- Предупреждение при переполнении экранированной восьмеричной последовательности
- Исправлена несогласованность $this
- Генерация идентификаторов сессий без хеширования
- Изменения в обработке INI-файлов
- Генерация идентификаторов сессий только с помощью CSPRNG
- Более информативное сообщение TypeError, если допустим NULL
- 16 Answers 16
Предупреждение при переполнении экранированной восьмеричной последовательности
Ранее 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: