Programa de Parceiros NEConheça
    Voltar ao Blog
    Segurança26 de outubro de 20268 min de leitura

    Como atualizar o PHP sem derrubar o site: riscos e cuidados

    Como atualizar o PHP sem derrubar o site: riscos e cuidados

    Depois da PHP2Shell, muitas empresas descobriram que estavam em uma versão do PHP sem correção, ou que nem sabiam qual versão rodava nos seus servidores. Atualizar o PHP é a única saída, mas feito às pressas, o upgrade pode derrubar o site, quebrar o checkout da loja ou deixar um sistema interno fora do ar.


    Este guia explica como fazer o upgrade com segurança: a diferença entre os dois tipos de atualização, os riscos de cada um, o passo a passo nos ambientes mais comuns e como voltar atrás se algo der errado.


    Não sabe se o seu site está exposto? Comece pela verificação gratuita da NE.


    Primeiro: qual upgrade você precisa fazer?


    "Atualizar o PHP" pode significar duas coisas bem diferentes, com riscos bem diferentes:


  1. Atualização de correção (dentro do mesmo ramo): por exemplo, do 8.3.20 para o 8.3.36. Traz só correções de falhas e de segurança, sem mudar o comportamento da linguagem. O risco é baixo, e é esse tipo de atualização que fecha falhas como a PHP2Shell.
  2. Migração de ramo: por exemplo, do 8.1 para o 8.3, ou do 7.4 para o 8.4. A linguagem muda: funções são removidas, avisos viram erros e extensões saem do pacote padrão. O risco é real e exige teste antes.

  3. Se você está em um ramo com suporte, a prioridade é a atualização de correção, que pode ser feita hoje. Se está no PHP 8.1 ou anterior, não existe mais correção: a migração de ramo é obrigatória, e precisa ser planejada.


    Quais versões ainda têm suporte


    Cada ramo do PHP recebe dois anos de suporte completo e mais dois anos só de correções de segurança. Em outubro de 2026, a situação é esta:


  4. PHP 8.5: suporte completo até 31/12/2027 e correções de segurança até 31/12/2029.
  5. PHP 8.4: suporte completo até 31/12/2026 e correções de segurança até 31/12/2028.
  6. PHP 8.3: só correções de segurança, até 31/12/2027.
  7. PHP 8.2: só correções de segurança, até 31/12/2026. Quem está no 8.2 tem dois meses para planejar a saída.
  8. PHP 8.1 ou anterior: sem suporte. Nenhuma falha nova será corrigida.

  9. Para uma migração feita agora, o destino mais indicado é o 8.4 ou o 8.5, que garantem pelo menos dois anos de correções sem precisar migrar de novo.


    Um ponto importante: Debian, Ubuntu LTS, Red Hat e derivados mantêm o PHP do próprio pacote com correções de segurança durante a vida da distribuição, mesmo depois do fim do suporte oficial do projeto. Se o seu PHP vem da distribuição e ela ainda tem suporte, atualizar o pacote já resolve as falhas, sem migração de ramo.


    Os riscos de migrar de ramo


    O que costuma quebrar em uma migração:


  10. Funções removidas e avisos que viram erro: o PHP 8 transformou em erro fatal muita coisa que antes era só aviso. Código antigo que "funcionava" com avisos escondidos pode simplesmente parar.
  11. Mudanças de comportamento silenciosas: no PHP 8, comparar número com texto mudou (0 == "abc" passou a ser falso). O código não dá erro, mas o resultado muda, e isso é mais perigoso do que um erro.
  12. Avisos de descontinuação: o 8.1 passou a avisar quando se passa null para funções nativas que não aceitam null; o 8.2 descontinuou propriedades dinâmicas; o 8.4 descontinuou parâmetros que aceitam null de forma implícita. Hoje são avisos, mas viram erro no PHP 9, e podem encher o log a ponto de lotar o disco.
  13. Extensões que saíram do pacote: no PHP 8.4, a extensão IMAP (usada para ler e-mails) saiu do PHP padrão e passou a ser instalada à parte. Sistemas que dependem dela param de funcionar se ninguém perceber.
  14. Bibliotecas e plugins: o Composer recusa instalar dependências que não declaram suporte à nova versão, e plugins de WordPress, temas e módulos de Magento ou Joomla abandonados pelo autor podem quebrar o site inteiro.
  15. Configuração que não migra sozinha: cada versão do PHP tem o próprio php.ini e os próprios pools do PHP-FPM. Limites de memória, tamanho de upload, fuso horário e ajustes de sessão feitos na versão antiga não passam para a nova.
  16. Duas versões rodando ao mesmo tempo: o site pode estar no PHP novo enquanto as rotinas agendadas (cron) e os scripts de linha de comando continuam no antigo, ou o contrário. O problema aparece dias depois, quando um relatório noturno falha.

  17. Os cuidados antes de começar


  18. Faça o inventário: liste os servidores, sites, APIs, painéis e ambientes de homologação com PHP, a versão de cada um e quem é o responsável. Os esquecidos costumam ser os mais vulneráveis.
  19. Tenha backup testado: snapshot da máquina, cópia do banco de dados e dos arquivos. Backup que nunca foi restaurado não é backup.
  20. Teste em homologação: monte uma cópia do ambiente com a nova versão, ligue todos os avisos (error_reporting = E_ALL) e navegue pelos fluxos que dão dinheiro: login, cadastro, carrinho, pagamento, emissão de nota, integrações.
  21. Analise o código antes de rodar: ferramentas como PHPStan e Rector apontam e corrigem automaticamente boa parte das incompatibilidades. Em projetos com Composer, composer why-not php 8.4 mostra quais bibliotecas impedem a migração.
  22. Confira plugins e extensões: liste as extensões em uso com php -m na versão atual e garanta que todas existem na nova. No WordPress, a tela "Saúde do site" mostra a versão do PHP, e cada plugin informa até qual versão foi testado.
  23. Combine a janela e o plano de volta: escolha um horário de menor movimento, avise quem precisa saber e escreva antes como desfazer a mudança.

  24. Como fazer o upgrade nos ambientes mais comuns


    Debian e Ubuntu


    Para a atualização de correção, basta atualizar os pacotes e reiniciar o PHP-FPM:


  25. apt update && apt upgrade
  26. systemctl restart php8.3-fpm (troque 8.3 pela sua versão)

  27. Para migrar de ramo, a forma mais segura é instalar a versão nova ao lado da antiga, sem remover nada. Versões que a distribuição não oferece vêm do repositório de Ondřej Surý, mantenedor dos pacotes de PHP do Debian (packages.sury.org, ou o PPA ondrej/php no Ubuntu).


  28. Instale o PHP novo e as mesmas extensões da versão atual, por exemplo apt install php8.4-fpm php8.4-mysql php8.4-curl php8.4-mbstring php8.4-xml php8.4-zip php8.4-gd php8.4-intl.
  29. Leve para /etc/php/8.4/ os ajustes que vocês fizeram no php.ini e no pool do FPM. Copie só os ajustes, não o arquivo inteiro, porque o arquivo da versão antiga pode ter opções que não existem mais.
  30. Troque um site de cada vez, apontando o Nginx ou o Apache para o novo socket (/run/php/php8.4-fpm.sock).
  31. Ajuste a linha de comando com update-alternatives --set php /usr/bin/php8.4, para que o cron e os scripts usem a mesma versão do site.
  32. Só desinstale a versão antiga depois de alguns dias sem problemas.

  33. Red Hat, AlmaLinux e Rocky Linux


    O PHP vem em "módulos" do repositório AppStream. Para trocar de ramo, use dnf module reset php, depois dnf module enable php:8.3 (com o ramo desejado) e, por fim, dnf update. Ramos mais novos do que os oferecidos pela distribuição vêm do repositório Remi. Depois, reinicie o php-fpm e o servidor web.


    Hospedagem com cPanel ou Plesk


    Os dois painéis permitem escolher a versão do PHP por site: no cPanel, pelo "MultiPHP Manager"; no Plesk, nas configurações de PHP de cada domínio. Troque primeiro um site de teste ou de menor movimento. Se a hospedagem não oferece uma versão com suporte, é hora de trocar de hospedagem.


    Docker


    A versão está na imagem base (por exemplo, FROM php:8.4-fpm). Troque a tag, reconstrua a imagem, instale as extensões necessárias e suba em homologação antes de produção. Lembre de reconstruir as imagens com frequência: um container antigo continua com o PHP vulnerável mesmo que o servidor esteja atualizado.


    Depois do upgrade


  34. Reinicie todos os processos: PHP-FPM, Apache e workers de fila. Enquanto não reiniciar, o código antigo continua na memória.
  35. Confirme a versão de verdade: php -v mostra a linha de comando, mas o site pode usar outra. Confira também o PHP-FPM e, se possível, uma página interna com a versão em uso (nunca deixe essa página pública).
  36. Esconda a versão: deixe expose_php = Off no php.ini, para não anunciar a versão do PHP para quem procura alvos.
  37. Acompanhe os logs nas primeiras horas e dias: erros do PHP, erros 500 no servidor web e rotinas agendadas.
  38. Teste os fluxos críticos de novo em produção: login, compra, formulários, integrações e e-mails.

  39. Se algo der errado


    Com a versão antiga instalada ao lado, voltar é simples: aponte o site de volta para o socket antigo e recarregue o servidor web. Em painel de hospedagem, é só escolher a versão anterior. Em Docker, suba a imagem anterior.


    Use a volta para ganhar tempo, não para ficar. Se o motivo foi falha de segurança, voltar significa ficar exposto de novo. Nesse caso, mantenha pelo menos a última versão de correção do ramo antigo enquanto o problema é resolvido.


    Como a NE ajuda


    Atualizar o PHP é rápido quando se sabe o que vai quebrar antes de quebrar. A NE cuida do processo de ponta a ponta:


  40. Inventário de todos os servidores e sites com PHP, inclusive os esquecidos.
  41. Análise de compatibilidade do código, das bibliotecas e dos plugins antes da migração.
  42. Upgrade com janela combinada, versões lado a lado e plano de volta testado.
  43. Monitoramento contínuo com o SOC 24/7 da NE, para identificar falhas e ataques depois da mudança.

  44. Faça a verificação gratuita do seu site e, se precisar de ajuda, fale com a nossa equipe de Professional Services.


    Fontes


  45. Versões do PHP com suporte (php.net)
  46. Guias oficiais de migração entre versões (php.net)
  47. PHP2Shell: o que fazer agora com as falhas críticas do PHP

  48. Compartilhe este artigo