POP HOSTING

register_globals do PHP: como ativar ou corrigir o site antigo imprimir

  • register_globals, php 5.4, undefined variable, php 8, migrar site antigo, $_POST, $_GET
  • 0

O register_globals foi removido no PHP 5.4 e não dá mais para ativar. Veja como identificar o problema e corrigir um site antigo para rodar no PHP 8.

  • Tempo: 15 a 60 min, conforme o tamanho do site
  • Nível: Intermediário
  • Vale para: sites em PHP antigos migrando para PHP 7.4, 8.x
  • Atualizado: outubro de 2026

O register_globals era uma opção do PHP que transformava automaticamente tudo o que chegava pela URL, por formulário ou por cookie em variáveis comuns. Se alguém acessasse pagina.php?nome=Ana, o script já recebia uma variável $nome com o valor "Ana", sem precisar ler $_GET['nome'].

Parece prático, mas era uma falha de segurança grave: qualquer visitante podia criar ou sobrescrever variáveis do script só mudando a URL. Um pagina.php?logado=1 bastava para enganar muitos sistemas de login da época.

Dá para ativar o register_globals hoje?

Não. A diretiva foi marcada como obsoleta no PHP 5.3 (2009) e removida no PHP 5.4, lançado em março de 2012. Do PHP 5.4 em diante ela simplesmente não existe, então:

  • a linha php_flag register_globals on no .htaccess não faz nada (no LiteSpeed é ignorada; em servidores com PHP-FPM ainda causa Erro 500);
  • não há opção para isso no Select PHP Version nem no MultiPHP INI Editor do cPanel;
  • o mesmo vale para register_long_arrays (as antigas $HTTP_POST_VARS e $HTTP_GET_VARS) e para o magic_quotes_gpc, removidos na mesma versão.

A única forma de "religar" seria rodar o site em PHP 5.3 ou anterior, uma versão sem nenhuma correção de segurança desde agosto de 2014. Em 2026 isso é pedir para o site ser invadido. O caminho é corrigir o código.

Como saber se o seu site depende do register_globals

Os sintomas típicos depois de trocar a versão do PHP:

  • formulários que "não enviam nada", buscas que sempre voltam vazias e paginação que não sai da página 1;
  • login que não funciona mesmo com a senha certa;
  • no arquivo error_log da pasta do site, em cPanel » Metrics » Errors ou na própria tela, avisos como Warning: Undefined variable $nome (no PHP 7 o texto é Notice: Undefined variable: nome).

Na prática: o código usa $nome, $id ou $pagina sem nunca ter atribuído valor a elas, porque contava com o PHP criando essas variáveis sozinho.

Como corrigir o código para o PHP 8

  1. Faça um backup completo dos arquivos e do banco antes de mexer.
  2. Encontre as variáveis "soltas". Para cada aviso de variável indefinida, descubra de onde o valor deveria vir: da URL ($_GET), de um formulário ($_POST), de um cookie ($_COOKIE) ou da sessão ($_SESSION).
  3. Leia o valor da fonte certa, no início do script. Veja o antes e depois:
    // ANTES (dependia do register_globals)
    echo "Resultado da busca por: $termo";
    
    // DEPOIS
    $termo = $_GET['termo'] ?? '';
    echo 'Resultado da busca por: ' . htmlspecialchars($termo);
  4. Troque as variáveis longas antigas. $HTTP_POST_VARS vira $_POST, $HTTP_GET_VARS vira $_GET, $HTTP_SESSION_VARS vira $_SESSION e assim por diante.
  5. Corrija a sessão. Funções como session_register() também saíram no PHP 5.4. Use session_start() e grave direto em $_SESSION['usuario'] = $usuario;.
  6. Teste com os avisos ligados numa cópia do site e vá corrigindo até não sobrar nenhum.
Atenção: é comum encontrar na internet um "remendo" que recria o register_globals com extract($_REQUEST) no topo do site. Ele faz o site voltar a funcionar, mas devolve exatamente a mesma brecha de segurança. Se precisar usar para ganhar alguns dias, trate como provisório e tenha a correção definitiva já em andamento.

E se o sistema for de terceiros?

Scripts muito antigos (sistemas de notícias, lojas e painéis de 2005 a 2010) costumam depender do register_globals em centenas de pontos. Nesses casos, quase sempre compensa mais migrar para uma versão atual do sistema ou para um CMS mantido, como o WordPress, do que remendar código sem suporte. Fale com o desenvolvedor original antes de decidir.

Perguntas frequentes

Posso desativar o register_globals por segurança?

Não precisa: em qualquer PHP a partir do 5.4 ele já não existe. Se o seu site roda numa versão mais antiga que isso, o problema real é a versão do PHP, não a diretiva.

O register_argc_argv também foi removido?

Não. O register_argc_argv continua existindo e só afeta scripts rodados na linha de comando. Ele não tem relação com formulários e não é causa dos problemas descritos aqui.

Vai modernizar um site antigo? A hospedagem cPanel da POP Hosting permite escolher a versão do PHP por conta, do 7.4 ao 8.5, para testar a migração com calma.

Esta resposta lhe foi útil?
« Retornar