Патч 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
Для воспроизведения:
- Конфигурация серверной части:
Система -> Конфигурация -> Клиенты - > Конфигурация клиента - > Параметры имени и адреса -> Показать дату рождения: "Необязательно" - Регистрация без отправки 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, учитывая, что по соображениям согласованности существует несколько необходимы дополнительные изменения.
Может быть, у кого-нибудь есть еще какие-нибудь советы?
Спасибо вам за ваши рекомендации!
3 answers
Https://github.com/Inchoo/Inchoo_PHP7/issues/125
[...] Но я вижу, что класс PhpMath не используется Zend, когда включено расширение bcmath, поэтому включение bcmath в php может решить проблему?
Это сделало всю работу за меня.
Это проблема с версией PHP.
Несколько версий поддерживают $varibale =""(Blnk), но для последней версии PHP требуется $variable =0 вместо пробела, чтобы считать его значение числовым.
sudo apt-get install php7.1-bcmath
Если вы используете PHP версии 7.1