+2

Mudanças na Migração para o PHP 4.2/4.3

criado por Paulo Assis em 09/01/2003 3:42pm
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.

Comentários:

Mostrando 1 - 10 de 10 comentários
Olá, estou com um micro aqui com a seguinte configuração:

Win98 + Apache 1.3.x + PHP

O php, apache, rodam normalmente, mas a variável register_globals do php.ini continua se comportando como se estivesse OFF, mas eu me certifiquei e ela está ON!!!

Tentei alguns dos metodos listados acima, nenhum deles me ajudou também...
27/06/2003 3:44pm (~13 anos atrás)

Fiz alguns teste com a função:
ini_set("register_globals", "On");
Mais não funcionol, pelo o que vi no site do php. Esta configurações tem niveis e alguns deles não são acessados e o caso de register_globals.

Eu uso o PHP 4.3 e nele essa função não funciona, ou pelomenos não no nivel de execução que eu estou.

O link é:
http://www.php.net/manual/en/function.ini-set.php

25/01/2003 7:54am (~14 anos atrás)

Valew.. era essa minha dúvida.. si a partir do ini_set, ele alterava soh pra um script ou pra sempre.
22/01/2003 12:24pm (~14 anos atrás)

Valew.. era essa minha dúvida.. si a partir do ini_set, ele alterava soh pra um script ou pra sempre.
22/01/2003 12:24pm (~14 anos atrás)

através do ini_set posso alterar as configurações do php.ini, porém mi vieram algumas dúvidas.

Estas alterações são permanentes?

Alguns scripts prontos, ainda necessitam do register_globals on a exemplo do phpAdsNew, o q fazer nesse caso? se desenvolvo um script com o globals off e preciso dele on pra rodar o phpAdsNew?

Existe algum problema grave em utilizar o register_globals on? pois utilizo o 4.2.2 e ele está on. No meu server, sempre que eles atualizam o php, eles deixam o ON como padrão, tem algum problema de grave nisso ou naum?
21/01/2003 1:21pm (~14 anos atrás)

Paulo Assis disse:
é, eu troquei todos eles no phpwebthings... é um pouco trabalhoso mas compensa. O código fica mais limpo também.

[ ]'s
20/01/2003 12:29pm (~14 anos atrás)

Estou tendo problemas com o captura das sessions, e acho que é devido a essas alterações do PHP.

Bem, vou explicar como está a configuração.

register_globals = On
session.auto_start = Off
session.use_trans_sid = 1

PHPs: 4.1.2 ou 4.2.2

bem, na página de que faço o login verifico se os dados batem com o BD, depois depois de algumas chacagens e tal o próximo passo é registrar as sessions..

session_register("id_usuario")
...
etc

na mesma página coloco apenas para verificação:

$variaveis=$HTTP_SESSION_VARS;
foreach ($variaveis as $exibe){
echo "<h3>$exibe</h3>";
}

e estão lá todos valores das variáveis...
mas só resgato com o <?ini_set("register_globals","Off");?>

mas na próxima página não consigo resgatar os valores das sessions...COM <?ini_set("register_globals","Off");?> OU SEM ELE...

quando passei O ID de sessão manualmente consegui resgatar os valores das sessions...

utilizei essa sintaxe
"<a href=pagina.php?".session_name()."=".session_id."().">"

mas nesse caso terei que colocar MANUALMENTE em todos os links e inclusive nos action POST dos formulários...

e agora?

como resgatar as sessions nessas condicoes?

PS: a aplicação usa as var globals por isso tenho que permanecer com register_globals em On

;)
13/01/2003 2:02pm (~14 anos atrás)

João K. disse:
Para corrigir rapidamente esse problema do register_globals=off, sem alteração o php.ini. Utilize este trecho de código antes do seu script.

if(!empty($HTTP_COOKIE_VARS)) {
while(list($xxxname, $value) = each($HTTP_COOKIE_VARS)) {
$$xxxname = $value;
}
}
if(!empty($HTTP_GET_VARS)) {
while(list($xxxname, $value) = each($HTTP_GET_VARS)) {
$$xxxname = $value;
}
}
if(!empty($HTTP_POST_VARS)){
while(list($xxxname, $value) = each($HTTP_POST_VARS)) {
$$xxxname = $value;
}
}
if(!empty($HTTP_POST_FILES)) {
while(list($xxxname, $value) = each($HTTP_POST_FILES)) {
$$xxxname = $value['tmp_name'];
}
}
09/01/2003 11:01pm (~14 anos atrás)

Gostei muito desse lembre que vc fez... em meus scripts sempre usava as variaveis globais, quando li um artigo sobre isso em um site entrangeiro...
Parabéns pelo excelente artigo!!!
09/01/2003 9:54pm (~14 anos atrás)

Eu gostaria de agradece ao autor deste artigo, pois apesar de já ter solidos conhecimentos na programação em php e fazer praticamente tudo com essa linguagem eu ainda tinha medo de instalas uma versão posterior a 4.1.2, pois tentei algumas outras vezes e tive problemas com sessão e variávei passadas por URL. Decidi hoje, exatamente há cinco minutos atrás a instalar a versão 4.3.0 do php e depois de ler este artigo percebi que o problema pode não ter sido a minha isntalação anterior e sim minha falta de conhcemento a respeito das mudanças na linguagem.

Deixo registrado aqui, meu MUITO OBRIGADO!!!
09/01/2003 7:21pm (~14 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)