Pular para o conteúdo

Arquitetura, modernização e mentoria · Guia

Como migrar do PHP 5 para o PHP 8 sem parar a operação?

Migrar do PHP 5 para o PHP 8 sem parar a operação é atualizar o sistema em etapas, versão por versão, com testes que fixam o comportamento atual antes de cada passo. O código é ajustado para rodar na versão atual e na seguinte, e cada virada tem critérios de aceite e um roteiro de reversão.

Master TimmAtualizado em 6 min de leitura

Por que PHP 5 e PHP 7 são um risco hoje

Pela política atual do projeto, cada versão do PHP recebe dois anos de suporte ativo e mais dois só com correções de segurança. Depois disso, falhas novas deixam de ser corrigidas.

  • PHP 5.6: Fim do suporte em 31 de dezembro de 2018.
  • PHP 7.4, a última versão 7: Fim do suporte em 28 de novembro de 2022.
  • PHP 8.0 e 8.1: Fim do suporte em 26 de novembro de 2023 e em 31 de dezembro de 2025.
  • Com suporte em outubro de 2026: O 8.2, só com correções de segurança até 31 de dezembro de 2026, e o 8.3, o 8.4 e o 8.5.

O risco vai além da segurança: bibliotecas novas deixam de aceitar versões antigas, servidores e hospedagens param de oferecê-las, e cada ano parado aumenta o salto.

O que quebra entre o PHP 5 e o PHP 8

Os guias de migração do manual do PHP listam as mudanças incompatíveis de cada versão. Em sistemas antigos, estas são as que mais aparecem.

  • Extensões removidas no PHP 7.0: Mysql, mssql e ereg deixam de existir; o acesso ao banco passa para mysqli ou PDO, e as expressões regulares, para as funções preg.
  • Construtores no estilo do PHP 4: No PHP 8.0, um método com o nome da classe deixa de ser construtor, e o código precisa usar __construct().
  • Funções removidas no PHP 8.0: Each() e create_function() deixam de existir e dão lugar a foreach e a funções anônimas.
  • Comparações: No PHP 8.0, 0 == "foo" passa a ser falso, o que muda o resultado de if e de switch em código antigo.
  • Avisos que viraram erros: No PHP 8.0, count() em um valor que não é contável lança TypeError e interrompe a execução.
  • Depreciações recentes: Passar null para parâmetros de funções nativas (8.1) e criar propriedades dinâmicas (8.2) geram avisos que antecipam quebras futuras.

Rede de testes antes de tocar no código

Sistema legado raramente tem testes, por isso a migração começa por eles. O objetivo não é cobrir tudo: é fixar o comportamento que o negócio não pode perder.

  • Testes de caracterização: Registram o que o sistema faz hoje, certo ou errado, nas rotas e nas regras mais usadas.
  • Fluxos críticos de ponta a ponta: Pedido, faturamento, pagamento e o que mais a operação usa todo dia.
  • Análise estática: Ferramentas de compatibilidade apontam funções removidas e sintaxe que não roda na versão de destino.
  • Ambiente reproduzível: O mesmo contêiner Docker para o time e para o CI, com a versão atual e a seguinte lado a lado.

Em uma plataforma legada de PHP e React/TypeScript da Quilt Software / PosNation, levamos a suíte de testes Jest de 540 para 1.455 em 3 semanas, com CI e gates de pre-commit.

Upgrade em etapas, versão por versão, e cutover sem downtime

  1. Inventário: Versões, extensões, bibliotecas, integrações e o que roda em cron ou em fila.
  2. Código compatível com as duas versões: Cada ajuste roda na versão atual e na seguinte, então vai para produção antes da troca do PHP.
  3. Dependências e framework: Bibliotecas e framework sobem junto quando a versão antiga não roda no PHP de destino.
  4. Homologação com dados reais: A nova versão roda em paralelo, com os testes e os fluxos críticos passando.
  5. Cutover: O tráfego passa aos poucos para os servidores da nova versão, com critérios de aceite e o caminho de volta pronto.
  6. Próxima versão: Com a atual estável em produção, o ciclo recomeça.

Na Regal Rexnord (NYSE: RRX), levamos aplicações de missão crítica do PHP 5.6 ao 8.4, em 10 versões, e migramos dois sistemas do CodeIgniter 2 para o 3, com suítes de testes unitários para cutovers sem downtime.

Onde a IA ajuda na migração, e onde não

  • Ajuda a ler: Agentes de código como o Claude Code leem código sem documentação, mapeiam dependências e explicam regras de negócio escondidas.
  • Ajuda a escrever: Propõe testes de caracterização e as correções repetitivas de cada versão, como trocar funções removidas.
  • Não decide: A regra de negócio recuperada é validada por quem conhece a operação, e todo merge passa por revisão humana.
  • Não substitui os testes: Uma mudança gerada por IA só entra com especificação aprovada e a suíte passando.

Na Regal Rexnord, usamos o Claude Code na engenharia reversa de código legado sem documentação, no mesmo trabalho que levou as aplicações do PHP 5.6 ao 8.4.

Serviço relacionado

Modernização de sistemas legados

Modernize o legado sem parar a operação.

Conversa inicial gratuita · Resposta em até 1 dia útil

Veja também: Automação de software com IA.

Perguntas frequentes

Dá para pular direto do PHP 5.6 para o PHP 8?

Dá para trocar o PHP em menos passos, mas as mudanças de todas as versões no caminho continuam valendo e precisam ser corrigidas. Por isso o código avança versão por versão, e o servidor só troca quando a suíte passa na versão de destino. Quanto maior o salto de uma vez, maior o risco de cada virada.

Dá para atualizar o framework junto com o PHP?

Dá, e muitas vezes é necessário, porque versões antigas de frameworks costumam não suportar as versões novas do PHP. O caminho seguro intercala os dois, um salto de cada vez, cada um com testes e cutover próprios, como nos dois sistemas que migramos do CodeIgniter 2 para o 3 na Regal Rexnord.

O desenvolvimento de novas funções fica congelado durante a migração?

Não precisa ficar: como cada ajuste roda nas duas versões, o código migrado e as funções novas entram pelo mesmo pipeline, com os mesmos testes. O que pede coordenação é a janela de cada cutover, curta e combinada com a operação.

O PHP 7.4 ainda é seguro em produção?

Não pelo projeto PHP: a versão 7.4 deixou de receber correções, inclusive de segurança, em 28 de novembro de 2022. Algumas distribuições de Linux e fornecedores mantêm correções próprias por mais tempo, mas bibliotecas novas já exigem PHP 8, e o salto fica maior a cada ano.

Fontes

Master Timm · Atualizado em

Conte o seu desafio

Conte o contexto: o problema, o prazo e o que já existe. Você fala direto com quem vai fazer o trabalho.

Pedir conversa inicial

Conversa inicial gratuita · Resposta em até 1 dia útil