Wordpress

Tela branca no WordPress 6.9: como achar o erro com PHP 8.3

A página abre branca. Sem mensagem, sem stack trace, corpo vazio — às vezes com 500 no cabeçalho, às vezes com 200 limpinho. Isso é erro fatal do PHP com display_errors desligado, que é exatamente como produção deve estar. A resposta já foi escrita em algum log; o trabalho é achar qual.

A última linha do log do PHP-FPM

grep -n 'error_log|catch_workers_output' /etc/php/8.3/fpm/pool.d/www.conf
sudo tail -n 40 /var/log/php8.3-fpm.log
sudo tail -n 40 /var/log/nginx/error.log

Na instalação padrão do Debian e do Ubuntu aquele php_admin_value[error_log] vem comentado no pool. Sem ele, o erro sai pelo stderr do worker e acaba no error.log do nginx, com o prefixo PHP message: no meio da linha. Você procura algo assim: PHP Fatal error: Uncaught Error: Call to undefined function ... in /var/www/seusite/html/wp-content/plugins/nome-do-plugin/inc/loader.php on line 88. O caminho do arquivo já entrega o culpado, sem chute.

Desativar o plugin sem ter painel

cd /var/www/seusite/html/wp-content/plugins
sudo -u www-data mv nome-do-plugin nome-do-plugin.off

A cada carregamento o wp_get_active_and_valid_plugins() testa com file_exists() se o arquivo principal de cada plugin ativo continua no lugar. Sumindo o diretório, ele pula aquele item e o site volta no F5 seguinte. Renomear em vez de apagar preserva o código e as configurações para quando você quiser investigar com calma. Pelo WP-CLI dá no mesmo: sudo -u www-data wp plugin deactivate nome-do-plugin --skip-plugins roda mesmo com o fatal de pé, porque a flag impede o carregamento dos plugins.

Cuidado com a conta de versão: create_function() e each() sumiram no PHP 8.0, não no 8.3 — só que quem pulou do 7.4 direto para o 8.3 descobre tudo de uma vez. O fatal só estoura quando aquele trecho roda, por isso o site parece inteiro e quebra em uma página só. E se o log não citar plugin nenhum, renomeie a pasta do tema em wp-content/themes: o WordPress cai no tema padrão sozinho, desde que ele ainda esteja instalado.

Post Recentes

WP_MEMORY_LIMIT no WordPress: resolver memória esgotada no PHP 8.3

Allowed memory size exhausted no painel: qual das duas constantes do wp-config.php mexer, onde conferir o valor real e por…

7 horas atrás

Converter data dd/mm/aaaa para o MySQL com DateTime::createFromFormat

strtotime com data brasileira devolve false e o INSERT quebra no MySQL 8. Use createFromFormat com getLastErrors antes de mandar…

2 dias atrás

Erro 500 no Magento 2: achar o relatório em var/report pelo ID da tela

O hash que o Magento mostra junto do erro é o nome de um arquivo em var/report. Veja como abrir,…

3 dias atrás

Campo extra no checkout em blocos do WooCommerce sem voltar pro shortcode

Seu snippet com woocommerce_checkout_fields parou de aparecer no checkout em blocos. Registre o campo pela API nova e leia o…

4 dias atrás

Fuso horário no PHP 8.3: log com 3 horas de diferença no servidor

O pedido entrou às 21h e o relatório mostra 00h do dia seguinte. Onde setar date.timezone no PHP 8.3 e…

5 dias atrás

Magento 2 não envia e-mail de pedido: async sending e cron parado

O pedido entra na loja e o e-mail nunca sai: antes de culpar o SMTP, veja o envio assíncrono, a…

5 dias atrás