Em Novembro do ano passado O PHP 8 aterrou. Anunciou algumas melhorias no desempenho, velocidade e segurança.
Como qualquer bom funileiro, apressei-me a actualizar para PHP 8 a partir da 7.4, especificamente a 7.4.16, a versão agora em execução no servidor.
Plof! um belo erro de 500 cumprimenta-me e quebra o site inteiro.
500 de erro no WordPress ao actualizar para o PHP 8
Nenhum URL é resolvido. Eu fiz o teste típico para desactivar todos os plugins e usar o modelo padrão.
O erro 500 não desapareceria. Fiquei chocado, mas passei o assunto convencido que ainda era muito cedo para actualizar e, como eles aconselharam, a melhor coisa a fazer era esperar que todos os autores de plugins e modelos actualizassem o seu código para o tornar compatível com o PHP 8.
Quase sete meses depois eu tentei novamente e o erro 500 ainda estava lá. A primeira pista de que a origem do erro está apenas neste blog é que nas outras duas instalações do WordPress que tenho no mesmo servidor tudo funciona correctamente.
Como um erro de 500 pode aparecer por muitas razões. O próximo passo lógico é puxar os registos de erros para tentar descobrir o que está errado. Eu recebo uma série de avisos como este:
Advertência PHP: Uso de constante indefinida menor - assumido 'menor' (isto irá lançar um erro numa versão futura do PHP) em /home/xxxxxx/public_html/blog/wp-config.php na linha 11
Ou seja, a constante deve ter citações à sua volta. Eu vou ao wp-config.php e de facto, a menor aparece sem citações nessa linha.
define ('WP_AUTO_UPDATE_CORE', menor);
Ao pesquisar no fórum WordPress descubro que muitas pessoas tiveram este mesmo problema ao actualizar para versões mais antigas do PHP devido a conflitos com um plugin ou template.
Não se pode excluir que o problema esteja relacionado com a instalação do WordPress que tem algo quebrado, como me foi dito num bilhete que enviei para LucusHost.
Em algumas das respostas que recebem, eles dizem que para resolver o problema basta adicionar as vírgulas invertidas a 'menor', por isso experimente e é isso que estou a fazer.
define ('WP_AUTO_UPDATE_CORE', 'menor');
WP_AUTO_UPDATE_CORE permite-lhe controlar as actualizações do núcleo do WordPress para versões menores, maiores e de desenvolvimento. Esta constante pode ser definida de várias maneiras. A remoção desta linha não é uma boa ideia.
#Desactiva todas as actualizações do núcleo:
define( 'WP_AUTO_UPDATE_CORE', falso );
# Habilita todas as actualizações, incluindo actualizações menores e maiores:
define( 'WP_AUTO_UPDATE_CORE', verdadeiro );
# Permite pequenas actualizações:
define( 'WP_AUTO_UPDATE_CORE', 'menor' );
Boas notícias e más notícias
A boa notícia é que agora, ao executar o PHP 8, o erro 500 desapareceu. Tudo parece funcionar bem à primeira vista, tanto plugins como posts. A má notícia é que o índice está quebrado e parece que assim.
Eu decidi atacar primeiro a modelo de mensagem feito com Elementor Pro caso o construtor tivesse deixado algum lixo escondido, mas depois de o ter revisto e refazer completamente, excluí que o erro tivesse vindo dali.
Agora ainda estou a expurgar o modelo (GeneratePress Premium) num ambiente de teste e pelo menos sei onde se parte, mas a maior parte das vezes estou a procurar no WordPress, que é onde eu penso que está o cerne da questão, algum código obsoleto arrastado, algum filtro entupido com gordura ou o que quer que seja :P
Vou deixar esta nota aqui no caso de alguém ter tido um problema semelhante e isso for útil, ou se o que escrevi aqui for útil, ou se você souber alguma coisa sobre o WP e puder fornecer mais algumas pistas para o resolver. Assim que eu encontrar a solução definitiva e a possível explicação, irei actualizar este post.
Relacionado WordPressePHP8.0. Lista de mudanças, desenvolvimentos e outras questões