Como resolver erro Magento 1.xx em PHP 7?[duplicado]
-
29-09-2020 - |
Pergunta
Magento 1.9.4 não funcionar com o PHP 7, mostrando o erro como abaixo:
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
Solução
Isso acontece porque em PHP 7
você precisa esclarecer o que você vai chamar o $callback
variável como um método (função).Assim, a linha original do código tem o seguinte aspecto (arquivo app/code/core/Mage/Core/Model/Layout.php
):
$out .= $this->getBlock($callback[0])->$callback[1]();
A fim de fazer o trabalho sobre a mais recente versão do PHP precisamos substituir este pedaço de código por este:
$out .= $this->getBlock($callback[0])->{$callback[1]}();
Consulte este blog para obter mais informações.
Outras dicas
Se você deseja executar o Magento 1.x site em PHP7, você precisa fazer alguns pequenos ajustes no seu alguns Magento 1.x arquivos para fazer ele funcionar sem quaisquer problemas.
Mais do Magento código ainda é válido em PHP 7, existem algumas incompatibilidades listados abaixo:
1.Uniforme Variável de problemas de Sintaxe:
1.1 app/code/core/Mage/Core/Model/Layout.php:555
Este ficheiro causas e fatal erro que trava o Magento.Substituir o arquivo e substituir
$out .= $this->getBlock($callback[0])->$callback[1]();
com
$out .= $this->getBlock($callback[0])->{$callback[1]}();
1.2 app\code\core\Mage\ImportExport\Model\Import\Uploader.php:135
Este ficheiro efeitos Magento módulo de importação de CSV.Substituir o arquivo, em seguida, substituir _validateFile função de() e substitua a linha 135 com substituir
$params['object']->$params['method']($filePath);
com
$params['object']->{$params['method']}($filePath);
1.3 app\code\core\Mage\ImportExport\Model\Export\Entidade\Product ype\Abstrato.php:99
Este problema efeito funcionalidade de exportação do Magento.Magento estende-se três classes de cima classe abstrata, de modo a raiz da causa do erro dentro abaixo da classe é a linha#99 na classe acima.
Mage_ImportExport_Model_Export_Entity_product_type_configurable Mage_ImportExport_Model_Export_Entity_product_type_grouped Mage_ImportExport_Model_Export_Entity_product_type_simple
Precisamos substituir acima de três classes em nosso código local piscina e substituir overrideAttribute função (), substitua a linha#99
$data['filter_options'] = $this->$data['options_method']();
com
$data['filter_options'] = $this->{$data['options_method']}();
1.4 app\code\core\Mage\ImportExport\Model\Export\Entidade\Cliente.php:250
Este ficheiro efeitos clientes de exportação funcionalidade.Substituição de arquivo acima e altere a linha#250 como mostrado abaixo
$data['filter_options'] = $this->$data['options_method']();
com
$data['filter_options'] = $this->{$data['options_method']}();
1.5 lib\Varien\Arquivo\Uploader.php:259
Carregar arquivo não irá funcionar.Magento estende Mage_Core_Model_File_Uploader da classe acima, então precisamos substituir esta classe e reescrever _validateFile() função de substituir abaixo da linha de
$params['object']->$params['method']($this->_file['tmp_name']);
com
$params['object']->{$params['method']}($this->_file['tmp_name']);
2.Tipo de carcaça Problema
2.1 app\code\core\Mage\Core\Model esource\Sessão.php:218
Magento Sessões não funciona no PHP 7, então, como resultado de utilizador de início de sessão não funciona.leia($sessId) a função deve retornar uma cadeia de caracteres para typecast a variável de retorno, como dado abaixo
return $data;
com
return (string)$data;
3.Total Geral Incorreto
Totais incorretas são devido à ordem de classificação incorreto do subtotal, desconto, frete etc. Correta a ordem de classificação através da criação de uma extensão e colocar o código abaixo config.xml da extensão
<global>
<sales>
<quote>
<totals>
<msrp>
<before>grand_total</before>
</msrp>
<shipping>
<after>subtotal,freeshipping,tax_subtotal,msrp</after>
</shipping>
</totals>
</quote>
</sales>
</global>
Aqui é a referência original para o que eu postei acima:http://scriptbaker.com/tag/magento-1-9/
Se você não pode encontrar qualquer consulta em seu código, então isso vai ser coberto pelo Magento e como eu disse antes, a maioria do código é válido, então você pode simplesmente ignorá-lo.Eu acredito que é tudo o que pode responder a sua pergunta.