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
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}
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.