Programação
Migrando para o novo PHP 4.2
Saiba quais são as mudanças na hora de programar para a nova versão do PHP
O lançamento do PHP 4.2, em abril de 2002, trouxe uma grande mudança com relação às variáveis globais que são criadas automaticamente. Essas mudanças podem fazer com que algumas aplicações desenvolvidas para versões anteriores do PHP parem de funcionar na nova versão.
As variáveis globais automáticas, antes criadas por default, passam agora a não existir. Como exemplo, podemos citar as variáveis vindas da resposta de um formulário (POST), as vindas da URL (GET), dos cookies, das sessões e muitas outras que não existem mais. Para acessar estas variáveis, existem duas maneiras:
Usando as globais $HTTP_*_VARS:
$HTTP_POST_VARS - Vêm através da resposta de um formulário (input type=”text” name=”campo” cria $HTTP_POST_VARS[“campo”]);
$HTTP_GET_VARS - Criadas a partir de uma URL (http://www.revistadolinux.com.br/index.php?id=10 cria $HTTP_GET_VARS[“id”]);
$HTTP_SESSION_VARS - Esta variável é mantida entre as páginas na mesma sessão;
$HTTP_SERVER_VARS - Variáveis definidas pelo servidor web;
$HTTP_COOKIE_VARS - Variáveis vindas dos cookies armazenados no cliente;
$HTTP_POST_FILES - Variáveis de campos de arquivos de um formulário;
$HTTP_ENV_VARS - Variáveis de ambiente do servidor;
Todas as globais acima existem desde as versões mais antigas do PHP, mas serão desativadas em versões posteriores ao PHP 4.2.
Usando as superglobais:
As superglobais podem ser acessadas de qualquer lugar do script, mesmo dentro de funções, sem precisar declará-las globais como as $HTTP_*_VARS. Elas foram criadas no PHP 4.1, portanto, scripts que utilizem estas variáveis não funcionarão no PHP 4.0.x e anteriores. Muitos provedores e ISPs ainda executam uma versão do PHP anterior à 4.1. Se a plataforma onde o programa vai ser executado está sob o controle do programador, com certeza a melhor escolha é a utilização destas superglobais. Caso contrário, a melhor solução é utilizar as globais $HTTP_*_VARS.
$_POST, $_GET, $_SESSION, $_SERVER, $_COOKIE, $_FILES e $_ENV são idênticas às $HTTP_*_VARS descritas anteriormente. Além da nova variável $_REQUEST, que contém todas as variáveis recebidas pelo script, como POST, GET, COOKIE, etc., sempre seguindo a ordem da configuração variables_order.
Como nos velhos tempos
Ainda é possível deixar o PHP 4.2 rodando como as versões anteriores, configurando register_globals on no php.ini e utilizando as globais automáticas antigas normalmente. Embora esta solução não seja a melhor saída, visto que register_globals on leva a uma programação menos segura. Muitos furos de segurança nos sites desenvolvidos em PHP são causados justamente pela sobreposição de globais internas do script através de uma correta manipulação da URL do site em scripts que seriam incluídos em outro, e que dependeriam da variável global do script que o inclui.
Quando estiver utilizando $HTTP_SESSION_VARS, não utilize as funções session_register e session_is_registered, visto que qualquer definição em $HTTP_SESSION_VARS já estará gravada na sessão. Com register_globals on esta variável deixa de funcionar.
Como fazer então para deixar o script portável para qualquer configuração do PHP? Utilizando o comando ini_set, que altera para o script corrente várias definições do arquivo php.ini, como, por exemplo, register_globals. No começo do script utilize o comando ini_set (”register_globals”, “Off”); e crie seu script de uma forma mais segura com as novas superglobais ou com $HTTP_*_VARS.
Paulo Machado Ottani Assis - paulo@coral.srv.br