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
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top