No topo da página, ou no meio do painel, aparecem linhas como Warning: ... in /home/conta/public_html/wp-content/plugins/... on line 214. O site até funciona. Mas está mostrando a toda a gente os caminhos das pastas do servidor, o nome da conta e, às vezes, pedaços de consultas à base de dados.
|
Isto é um problema de segurança antes de ser um problema de estética. Os varredores automáticos recolhem exatamente esta informação: caminhos completos, versões e nomes de plugins. Trate disto hoje, mesmo que o site esteja a funcionar.
|
O que os avisos são, e o que não são
Nem todas as mensagens têm o mesmo peso. A palavra que vem antes dos dois pontos diz tudo:
| A palavra |
O que quer dizer |
| Fatal error |
A página parou aqui. É a única que parte mesmo o site: erros comuns do WordPress. Se falar de memória esgotada, aumentar a memória disponível ao WordPress. |
| Warning |
Alguma coisa correu mal mas o PHP continuou. Um arquivo que não existe, uma ligação que falhou. Não pára a página, mas alguma coisa não está acontecendo. |
| Notice |
Uma desatenção no código, como usar uma variável que nunca foi definida. Ruído, até serem muitos. |
| Deprecated |
Código escrito para uma versão antiga do PHP, a correr numa nova. É o aviso que aparece às centenas depois de mudar para PHP 8. |
Primeiro: calar, em três sites
As mensagens estão à vista porque alguma coisa mandou mostrá-las. Normalmente é uma destas três, e vale a pena verificar as três por ordem:
| 1 |
No wp-config.php. Procure a linha do WP_DEBUG. Se estiver a true, é quase de certeza isto: alguém a ligou para diagnosticar e nunca a desligou. Ponha define( 'WP_DEBUG', false );.
|
|
| 2 |
Se precisa do diagnóstico ligado, então ligue-o para um arquivo em vez do tela: WP_DEBUG a true, WP_DEBUG_LOG a true e WP_DEBUG_DISPLAY a false.
|
|
| 3 |
Nas opções do PHP. No cPanel, Select PHP Version › Options, confirme que o display_errors está desligado. É assim que está de origem, mas pode ter sido mudado.
|
|
| 4 |
Limpe a cache do plugin de cache, se tiver um. As páginas guardadas continuam mostrando os avisos que tinham quando foram guardadas.
|
|
|
Um cinto por cima das calças. Acrescentar @ini_set( 'display_errors', 0 ); no topo do wp-config.php, logo a seguir ao <?php, garante que nada mostra erros mesmo que um plugin os volte a ligar por sua conta.
|
Depois: tratar a causa
Calar não cura. Os avisos continuam sendo escritos no registro, continuam custando trabalho ao servidor em cada visita, e um arquivo de registro com milhares de linhas iguais come o espaço e os arquivos disponíveis da conta.
O caminho do arquivo diz-lhe de quem é a culpa. Se a linha tem wp-content/plugins/nome-do-plugin/, o problema é desse plugin. Se tem wp-content/themes/, é o tema.
| O que a linha diz |
O que fazer |
| Um plugin que você conhece |
Actualize-o. Se já está atualizado e continua, é um plugin abandonado pelo autor: procure substituto. |
| Um plugin que não usa |
Apague-o. É a cura mais rápida e a mais barata. |
| Centenas de Deprecated depois de mudar de PHP |
O código é velho para a versão nova. Atualize tudo; se não houver atualização, volte a uma versão de PHP anterior enquanto procura substituto: mudar a versão do PHP sem partir o site. |
| O tema |
Se é um tema comprado, peça ao autor. Se é um tema-filho feito por alguém, é aí que se corrige. |
O registro completo, onde vive e como se lê linha a linha, está em onde está o log de erros do PHP.
O efeito lateral que ninguém liga aos avisos
Um aviso impresso antes do resto da página parte coisas que nada têm a ver com ele. O PHP já escreveu texto para o navegador, e a partir daí não consegue mais reencaminhar nem enviar um arquivo. O sintoma típico é um headers already sent, ou uma exportação que baixa um arquivo corrompido, ou uma entrada que não reencaminha.
Por isso, se alguma coisa estranha começou ao mesmo tempo que os avisos, é provavelmente a mesma história.
A regra que fica
Registrar tudo, mostrar nada. É a combinação certa para um site no ar, e é como o servidor já vem configurado. Se algum dia precisar mesmo de ver o erro no tela, ligue, reproduza, desligue. Minutos, não dias.