+2

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

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


Este artigo foi escrito por mim e publicado na Revista do Linux, edição no. 32.
Reproduzido com a permissão da Revista Do Linux (http://www.RevistaDoLinux.com.br)

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 (~21 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 (~21 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 (~21 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 (~21 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 (~21 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 (~21 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 (~21 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 (~21 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 (~21 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 (~21 anos atrás)

Novo Comentário:

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