Патч M1 PHP7.2 - Регистрация клиента - "Обнаруженное нечисловое значение"


Я столкнулся с проблемой с Magento 1.9.2.4 и исправлением PHP7:

Если я выберу необязательный DOB и зарегистрирую без DOB, в файле журнала появится ошибка:

2018-10-16T09:45:59+00:00 ERR (3): Warning: A non-numeric value encountered  in /var/www/html/magento1924/lib/Zend/Locale/Math/PhpMath.php on line 94
2018-10-16T09:45:59+00:00 ERR (3): Warning: A non-numeric value encountered  in /var/www/html/magento1924/lib/Zend/Locale/Math/PhpMath.php on line 95

Для воспроизведения:

  1. Конфигурация серверной части:
    Система -> Конфигурация -> Клиенты - > Конфигурация клиента - > Параметры имени и адреса -> Показать дату рождения: "Необязательно"
  2. Регистрация без отправки DOB.

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

Lib/Zend/Locale/Math/PhpMath.php

 public static function Sub($op1, $op2, $scale = null)
 {
     if ($scale === null) {
         $scale     = Zend_Locale_Math_PhpMath::$defaultScale;
         $precision = Zend_Locale_Math_PhpMath::$defaultPrecision;
     } else {
         $precision = pow(10, -$scale);
     }

     if (empty($op1)) {
         $op1 = 0;
     }

 +    if (empty($op2)) {
 +        $op2 = 0;
 +    }
 +    
     $op1  = self::normalize($op1);
     $op2  = self::normalize($op2);
     $result = $op1 - $op2;
     if (is_infinite($result)  or  (abs($result + $op2 - $op1) > $precision)) {
         #require_once 'Zend/Locale/Math/Exception.php';
         throw new Zend_Locale_Math_Exception("subtraction overflow: $op1 - $op2 != $result", $op1, $op2, $result);
     }

     return self::round(self::normalize($result), $scale);
 }

Но в целом я не очень хорошо чувствую изменение функций в части ZendFramework Magento, учитывая, что по соображениям согласованности существует несколько необходимы дополнительные изменения.

Может быть, у кого-нибудь есть еще какие-нибудь советы?
Спасибо вам за ваши рекомендации!

Author: ulbiopro, 2018-10-16

3 answers

Https://github.com/Inchoo/Inchoo_PHP7/issues/125

[...] Но я вижу, что класс PhpMath не используется Zend, когда включено расширение bcmath, поэтому включение bcmath в php может решить проблему?

Это сделало всю работу за меня.

 1
Author: ulbiopro, 2020-06-15 08:30:17

Это проблема с версией PHP.

Несколько версий поддерживают $varibale =""(Blnk), но для последней версии PHP требуется $variable =0 вместо пробела, чтобы считать его значение числовым.

 1
Author: zuber bandi, 2019-07-15 07:16:39
sudo apt-get install php7.1-bcmath

Если вы используете PHP версии 7.1

 0
Author: M14, 2020-11-03 13:06:09