Как устранить ошибку Magento 1.xx на PHP 7?[дубликат]
-
29-09-2020 - |
Вопрос
Magento 1.9.4 не работает с PHP 7, отображается ошибка, как показано ниже:
Fatal error: Uncaught Error: Function name must be a string in
app\code\core\Mage\Core\Model\Layout.php:555 Stack trace: #0
app\code\core\Mage\Core\Controller\Varien\Action.php(390): Mage_Core_Model_Layout->getOutput() #1
app\code\core\Mage\Cms\Helper\Page.php(137): Mage_Core_Controller_Varien_Action->renderLayout() #2
app\code\core\Mage\Cms\Helper\Page.php(52): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'home') #3
app\code\core\Mage\Cms\controllers\IndexController.php(45): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'home') #4
app\code\core\Mage\Core\Controller\Varien\Action.php(418): Mage_Cms_IndexController->indexAction() #5
app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index') #6
app\code\core\Mage\Core\Model\Layout.php on line 555
Решение
Это происходит потому, что в PHP 7
вам необходимо уточнить, что вы собираетесь позвонить $callback
переменная как метод (функция).Итак, исходная строка кода выглядит следующим образом (файл app/code/core/Mage/Core/Model/Layout.php
):
$out .= $this->getBlock($callback[0])->$callback[1]();
Чтобы заставить его работать в последней версии PHP, нам нужно заменить этот фрагмент кода следующим:
$out .= $this->getBlock($callback[0])->{$callback[1]}();
Ссылаться этот блог для дополнительной информации.
Другие советы
Если вы хотите запустить свой веб-сайт Magento 1.x на PHP7, вам нужно внести некоторые небольшие изменения в некоторые файлы Magento 1.x, чтобы он работал без каких-либо проблем.
Большая часть кода Magento все еще действительна в PHP 7, есть несколько несовместимостей, перечисленных ниже:
1.Проблемы с единообразным синтаксисом переменных:
1.1 приложение/ код/ ядро/Mage/Core/Модель/Макет.php:555
Этот файл вызывает неустранимую ошибку, которая приводит к сбою Magento.Переопределите файл и замените
$out .= $this->getBlock($callback[0])->$callback[1]();
с
$out .= $this->getBlock($callback[0])->{$callback[1]}();
1.2 приложение\код\ядро\Mage\Импортэкспорт\Модель\Импорт\Загрузчик.php:135
Этот файл влияет на импортер Magento CSV.Переопределите файл, затем переопределите функцию _validateFile() и замените строку 135 на заменить
$params['object']->$params['method']($filePath);
с
$params['object']->{$params['method']}($filePath);
1.3 приложение\код\ядро\Mage\Импортэкспорт\Модель\Экспорт\Сущность\Продукт\Тип\Аннотация.php:99
Эта проблема влияет на функциональность экспорта Magento.Magento расширяет три класса из вышеуказанного абстрактного класса, поэтому основной причиной ошибки внутри нижеприведенного класса является строка # 99 в вышеприведенном классе.
mage_importexport_model_export_entity_product_type_figurable Mage_ImportExport_Model_Export_Entity_Product_Type_Grouped Mage_ImportExport_Model_Export_Entity_Product_Type_Simple
Нам нужно переопределить вышеупомянутые три класса в нашем локальном пуле кода и переопределить функцию overrideAttribute(), заменив строку #99
$data['filter_options'] = $this->$data['options_method']();
с
$data['filter_options'] = $this->{$data['options_method']}();
1.4 app\code\core\Mage\ImportExport\Model\Export\Entity\Customer.php:250
Этот файл влияет на функциональность экспорта клиентов.Переопределите приведенный выше файл и измените строку # 250, как показано ниже
$data['filter_options'] = $this->$data['options_method']();
с
$data['filter_options'] = $this->{$data['options_method']}();
1.5 библиотека\Varien\File\Uploader.php:259
Загрузка файла не будет работать.Magento расширяет Mage_Core_Model_File_Uploader из вышеуказанного класса, поэтому нам нужно переопределить этот класс и переписать функцию _validateFile(), заменив строку ниже
$params['object']->$params['method']($this->_file['tmp_name']);
с
$params['object']->{$params['method']}($this->_file['tmp_name']);
2.Проблема с приведением типов
2.1 приложение\код\ядро\Mage\Core\Модель\Ресурс\Сессия.php:218
Сеансы Magento не работают на PHP 7, поэтому в результате вход пользователя в систему не работает.функция read($sessId) должна возвращать строку, поэтому введите возвращаемую переменную, как указано ниже
return $data;
с
return (string)$data;
3.Неверный Общий итог
Неправильные итоги получены из-за неправильного порядка сортировки промежуточных итогов, скидки, доставки и т.д. Исправьте порядок сортировки, создав расширение и вставив приведенный ниже код в config.xml расширения
<global>
<sales>
<quote>
<totals>
<msrp>
<before>grand_total</before>
</msrp>
<shipping>
<after>subtotal,freeshipping,tax_subtotal,msrp</after>
</shipping>
</totals>
</quote>
</sales>
</global>
Вот оригинальная ссылка на то, что я опубликовал выше:http://scriptbaker.com/tag/magento-1-9/
Если вы не можете найти какой-либо запрос в своем коде, это будет рассмотрено Magento, и, как я уже говорил ранее, большая часть кода допустима, поэтому вы можете просто проигнорировать его.Я верю, что это все, что может ответить на ваш вопрос.