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
Nesta página
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
- Inventário: Versões, extensões, bibliotecas, integrações e o que roda em cron ou em fila.
- 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.
- Dependências e framework: Bibliotecas e framework sobem junto quando a versão antiga não roda no PHP de destino.
- Homologação com dados reais: A nova versão roda em paralelo, com os testes e os fluxos críticos passando.
- 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.
- 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