Variabili d'ambiente in PHP >=4.1.0

Nelle versioni di php dopo la 4.1.0 sono state ridefinite le variabili d'ambiente che andranno a sostituire i vecchi array. Dato il loro largo e importante utilizzo le elenchiamo:

$_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_SERVER_VARS[]


Il funzionamento è molto simile ai vecchi array, quindi se in uno script fate riferimento alle variabili in input con gli appositi array non si deve far altro che cambiare i nomi.
Decisamente diverso invece se per riferirsi alle variabili in input si usava 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
register_globals = 'Off'
mentre in quelle precedenti la configurazione di default era:
register_globals = 'On'
Cambiando questa configurazione non vengono create in modo automatico le variabili di GET e POST ma sono presenti solo nelle rispettive variabili d'ambiente.


E' consigliabile mantenere la riga su Off, ma è sempre possibile impostarla su On (anche se ciò è deprecato per motivi di sicurezza).
Un'altra novità che può tornare utile è il fatto che queste variabili sono automaticamente globali, se in una funzione si inseriva:
global $HTTP_GET_VARS;
per rendere le variabili get visibili, ora tutto ciò non sarà necessario.

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:
if(!isset($_GET)) $_GET = $HTTP_GET_VARS;
oppure
if(!isset($_POST)) $_GET = $HTTP_POST_VARS;
(ovviamente una per ogni array usato)
Importante
Usare questa soluzione può comportare alcuni problemi di sicurezza:
qualche utente malizioso potrebbe richiamare la pagina con pagina.php?_GET['var']=53 e $_GET sarebbe settato.
Una 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;
}


Autore originario: "Chris" dal forum di html.it

Privacy Policy