Como resolver os erros do Magento 1.x com PHP7

Com a chegada do PHP7 ganhamos, falando em linhas gerais, melhor processamento de algumas funções que vão de encontro com o Magento na sua versão 1.x, mais ainda na 1.9. Porém o Magento 1 não foi projetado para usar o PHP7 o que nos obriga a fazer algumas modificações e é sobre isso que falarei neste artigo.

Por que usar o PHP7 no Magento?

Para o Magento 1 as versões do PHP indicadas no site oficial são 5.4, 5.5 e 5.6. Com estas versões o Magento rodará 100% sem apresentar erros, mas visando sempre usar as ferramentas mais recentes nos vem a pergunta de por que não usar a versão mais recente do PHP que no caso é o 7? O magento roda bem em praticamente todas as versões, porém devido a uma alteração do código na versão 7  o Magento passou a apresentar erros devido a variáveis que não eram reconhecidas como funções ou objetos. Isso, claro explicando de forma resumida.

Porém resolvendo-se tais conflitos conseguimos um desempenho muito melhor nas requisições do sistema, o que garante uma melhor resposta para o usuário final, mais velocidade, para demonstrar isso veja o resultado conseguido pelo site Atwix que mostra a diferença de desempenho do PHP7 contra a versão 5.6.

Este teste foi feito simulando 20 visitas por segundo acessando uma página de produto configurável, resuiltado de pesquisa e uma página sobre nós.

Usando PHP 5.6

Usando PHP7

Através dos gráficos acima fica clara a vantagem de utilizar o PHP7 no Magento. O PHP7 é realmente mais rápido, o que o torna uma opção muito interessante que vale a tarefa de fazer esta adaptação.

Tornando o Magento 1 compatível com PHP7

Antes de tudo não custa lembrar que você deve fazer backup da sua loja antes de fazer qualquer alteração!

Pesquisando é fácil encontrar o módulo que faz essa compatibilidade para a maioria dos recursos, clique aqui para baixar o módulo de compatibilidade do Magento com PHP7 da inchoo, porém apenas isso não garantirá que o Magento estará funcionando 100%, então vamos lá a estas alterações. alguns erros poderão acontecer, isso porque o PHP7 tem alguns recursos que fazem com que algumas nomenclaturas não sejam mais reconhecidas como objeto, um erro comum de acontecer é este

Fatal error: Uncaught Error: Function name must be a string in app/code/core/Mage/Core/Model/Layout.php:>555

Isso acontece porque no PHP7 precisamos dizer que a variável será chamada como uma função, seguindo o arquivo em app/code/core/Mage/Core/Model/Layout.php, controntraremos:

$out .= $this->getBlock($callback[0])->$callback[1]()

o que precisamos fazer neste caso é acrescentar chaves ({}) envolvendo a variável, que vai ficar assim:

$out .= $this->getBlock($callback[0])->{$callback[1]}();

Esta solução deve resolver 99% dos conflitos com o PHP7, caso encontre outros comente aqui para tornar este artigo ainda mais completo.

Um forte abraço

OBS: Informações tiradas dos sites Inchoo e Atwix.

Respostas de 2

  1. Olá Ronaldo, tive um problema. Quando vou atualizar o produto, tipo estoque ou qualquer outra coisa retorna erros no PHP 7. Minha loja é 1.9.3.. De resto tudo funcionando..

    Decoding failed: Syntax error

    Trace:
    #0 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/core/Mage/Core/Helper/Data.php(659): Zend_Json::decode(”, 1)
    #1 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/local/Amasty/Conf/Model/Observer.php(112): Mage_Core_Helper_Data->jsonDecode(NULL)
    #2 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/core/Mage/Core/Model/App.php(1358): Amasty_Conf_Model_Observer->onSuperProductAttributesPrepareSave(Object(Varien_Event_Observer))
    #3 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/core/Mage/Core/Model/App.php(1337): Mage_Core_Model_App->_callObserverMethod(Object(Amasty_Conf_Model_Observer), ‘onSuperProductA…’, Object(Varien_Event_Observer))
    #4 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/Mage.php(448): Mage_Core_Model_App->dispatchEvent(‘catalog_product…’, Array)
    #5 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php(670): Mage::dispatchEvent(‘catalog_product…’, Array)
    #6 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php(725): Mage_Adminhtml_Catalog_ProductController->_initProductSave()
    #7 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_Catalog_ProductController->saveAction()
    #8 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch(‘save’)
    #9 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
    #10 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
    #11 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/app/Mage.php(683): Mage_Core_Model_App->run(Array)
    #12 /mnt/data/home/cloudwaysapps.com/uuftercftm/public_html/index.php(83): Mage::run(”, ‘store’)
    #13 {main}

    1. não é normal o erro de php 7 dar erro somente quando atualiza o produto. Experimenta desabilitar os módulos que instalou e vai testando. se não resolver tenta usar a versão 5.6 do php mesmo.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.