Cursos Magento

Tela branca no Magento 1. Como resolver?

, ,

Atualizado em 11 de setembro de 2020

Este é um problema que afeta não apenas lojas Magento, mas aplicações PHP de uma forma geral.

Uma aplicação Magento (ou PHP) pode apresentar uma tela em branco quando um erro PHP ocorre e é omitido pelas configurações do sistema.

Para resolver o problema, precisamos primeiro descobrir o que está causando este erro. Em outras palavras, qual é o erro?

Modo desenvolvedor no Magento

O modo desenvolvedor faz com que erros e exceções do Magento sejam exibidos na tela, ao invés de serem apenas logados.

Desta forma, se o seu PHP estiver configurado para não exibir erros na tela, uma exceção do Magento seria exibida ao invés de gravada em var/log/system.log.

Por exemplo: Mage::getModel('core/url')->metodoQueNaoExiste() passará a exibir uma exceção ou um arquivo de erro salvo em var/report/[numero-do-erro].

Tela de erro do Magento 1
Tela de erro quando o modo desenvolvedor não está ativado.
O conteúdo do erro pode ser encontrado em var/report/1348017210650.
a:5:{i:0;s:66:"Invalid method Mage_Core_Model_Url::metodoQueNaoExiste(Array
(
)
)";i:1;s:3316:"#0 /Users/martins/www/cursoback/magento/app/design/frontend/rwd/default/template/page/html/footer.phtml(33): Varien_Object->__call('metodoQueNaoExi...', Array)
#1 /Users/martins/www/cursoback/magento/app/design/frontend/rwd/default/template/page/html/footer.phtml(33): Mage_Core_Model_Url->metodoQueNaoExiste()
#2 /Users/martins/www/cursoback/magento/app/code/core/Mage/Core/Block/Template.php(241): include('/Users/martins/...')
#3 /Users/martins/www/cursoback/magento/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('frontend/rwd/de...')
#4 /Users/martins/www/cursoback/magento/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#5 /Users/martins/www/cursoback/magento/app/code/core/Mage/Core/Block/Abstract.php(923): Mage_Core_Block_Template->_toHtml()
#6 /Users/martins/www/cursoback/magento/app/code/core/Mage/Core/Block/Abstract.php(641): Mage_Core_Block_Abstract->toHtml()

Se ativarmos o modo desenvolvedor isto fica bem mais fácil e o erro é exibido direto na tela.

Mensagem de erro exibida na tela do Magento

Para ativar o modo desenvolvedor

Para ativar o modo desenvolvedor você precisa apenas setar a variável de servidor $_SERVER['MAGE_IS_DEVELOPER_MODE'] com qualquer valor.

Se estiver usando Apache e o mod_env estiver disponível, basta adicionar a seguinte linha no seu arquivo /.htaccess

SetEnv MAGE_IS_DEVELOPER_MODE true

Idealmente você deve trabalhar com o modo desenvolvedor somente no seu ambiente local, e nunca em produção. Se o problema ocorre em sua loja em produção, é recomendável que olhe os logs de erro do PHP e do Apache/Nginx.


Erros do PHP

Em outros casos mais comuns o problema pode estar em erros do PHP que estão sendo omitidos.

Geralmente erros omitidos são logados no seu PHP.

Vejamos o cenário abaixo:

Tela branca no Magento. Nada é exibido.

Forçando PHP a Exibir erros

Se você estiver no ambiente local de desenvolvimento, você pode simplesmente forçar o PHP a exibir erros na tela.

Isso pode ser feito de duas maneiras:

Direto no index.php do Magento

Adicionando as seguintes linhas:

ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);

Alterando as configurações do php.ini (recomendado)

Adicionando/modificando as seguintes linhas no arquivo php.ini:

display_errors=On
error_reporting=E_ALL
Erro sendo exibido no Magento 1
Quando ativamos os erros do PHP podemos ver o erro.

No caso acima, o trata-se de um método depreciado no PHP. E neste caso em especial, o problema é no core do Magento, pois estou executando um Magento 1.9.3.1 em um PHP 7.2.

Vendo os logs do PHP (ideal para lojas em Produção)

Caso sua loja esteja em produção, precisamos ver se o PHP está configurado para logar estes erros e onde ele irá logar isso.

Estas informações podem ser facilmente encontradas no <?php phpinfo(); da nossa loja.

error_log no php
Configuração error_log mostra onde os logs do PHP são gravados.
log_errors no php
Diretiva log_errors mostra de os logs de erros estão ativos.
display_startup_errors no php
Apesar de não serem necessariamente exibidos (display_errors), o display_startup_erros deve estar ativo.
error_reporting no php
Por fim, o error_reporting deve ter o valor equivalente a uma constante que registre todos os tipos de erros.

Desta forma, todos os erros serão logados no arquivo especificado em error_log. E assim podemos usar o comando tail -f para acompanhar o final deste arquivo.

Quando nada mais funcionar

Quando nada mais parece funcionar e não conseguimos exibir uma mensagem de erro com sucesso, é possível que um erro fatal esteja ocorrendo em algum lugar.

Para solucionar este impasse, podemos registrar um handler para lidar com isso. Fazemos isso adicionando algo como isso ao nosso index.php:

ini_set('error_reporting', E_ERROR);

register_shutdown_function("fatal_handler");

function fatal_handler() {
    $error = error_get_last();
    echo("<pre>");
    print_r($error);
}
Últimos posts por Ricardo Martins (exibir todos)
Assuntos: | | | |
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-1/tela-branca-no-magento/"]