Nelle versioni di php dopo la 4.1.0 sono state inserite nuove variabili che andranno a sostituire i vecchi array.
le nuove sono:
il funzionamento è molto simile ai vecchi array, quindi se in uno script fate riferimento alle variabili in input con gli appositi array non dovrete far altro che cambiare i nomi.codice:$_SERVER al posto di $HTTP_SERVER_VARS $_GET al posto di $HTTP_GET_VARS $_POST al posto di $HTTP_POST_VARS $_COOKIE al posto di $HTTP_COOKIE_VARS $_FILES al posto di $HTTP_POST_FILES $_ENV al posto di $HTTP_ENV_VARS $_REQUEST (non ha equivalenti nelle vecchie versioni) $_SESSION[] per $HTTP_SESSION_VARS[]
Decisamente diverso invece se per riferirvi alle variabili in input usavate il nome della variabile e non il suo array (es. $var invece di $HTTP_GET_VARS[var]). Questo perchè nelle versioni dalla 4.2.0 in poi per default il php.ini contiente questa riga
mentre in quelle precedenti la riga era scritta per default cosìcodice:register_globals = 'Off'
E' consigliabile mantenere la riga su Off, ma è sempre possibile impostarla su On (anche se ciò è deprecato)codice:register_globals = 'On'
Un'altra novità che può tornare utile è il fatto che queste variabili sono automaticamente globali:
se in una funzione inserivate
per rendere le variabili get visibili, ora tutto ciò non sarà necessario.Codice PHP:
global $HTTP_GET_VARS;
Un ultimo consiglio...
in questo momento di transizione è consigliabile scrivere gli script riferendosi alle variabili con i nuovi array ed inserire in cima allo script righe di questo tipo:
(ovviamente una per ogni array usatoCodice PHP:
if(!isset($_GET)) $_GET = $HTTP_GET_VARS;
)
Spero di non essermi dilungato troppo..![]()
chris
Importante
per mantenere la compatibilità php 4.0.x con tutte le versioni successive (php 4.1.x e php 4.2.x) avevo consigliato di aggiungere in cima allo script una riga del genere:
if(!isset($_GET)) $_GET = $HTTP_GET_VARS;
ho letto invece su una mailing list che in effetti qualche utente malizioso potrebbe richiamare la pagina con pagina.php?_GET['var']=53
e $_GET sarebbe settato.
la soluzione proposta è questa:
if(!isset($_SERVER) OR !$_SERVER OR !is_array($_SERVER) OR count(array_diff($_SERVER, $HTTP_SERVER_VARS))){
$_GET = &$HTTP_GET_VARS;
$_POST = &$HTTP_POST_VARS;
$_SERVER = &$HTTP_SERVER_VARS;
$_ENV = &$HTTP_ENV_VARS;
$_COOKIE = &$HTTP_COOKIE_VARS;
$_FILES = &$HTTP_POST_FILES;
$_SESSION = &$HTTP_SESSION_VARS;
}