PHP
Variabili superglobali PHP
Ricerca…
introduzione
I superglobals sono variabili integrate che sono sempre disponibili in tutti gli ambiti.
Diverse variabili predefinite in PHP sono "superglobali", il che significa che sono disponibili in tutti gli ambiti di uno script. Non è necessario fare global $variable;
per accedervi all'interno di funzioni o metodi.
PHP5 SuperGlobals
Di seguito sono riportati i SuperGlobals di PHP5
- $ GLOBALS
- $ _REQUEST
- $ _GET
- $ _POST
- $ _FILES
- $ _SERVER
- $ _ENV
- $ _COOKIE
- $ _SESSION
$ GLOBALS : questa variabile SuperGlobal viene utilizzata per accedere alle variabili globali.
<?php
$a = 10;
function foo(){
echo $GLOBALS['a'];
}
//Which will print 10 Global Variable a
?>
$ _REQUEST : questa variabile SuperGlobal viene utilizzata per raccogliere i dati inviati da un modulo HTML.
<?php
if(isset($_REQUEST['user'])){
echo $_REQUEST['user'];
}
//This will print value of HTML Field with name=user submitted using POST and/or GET MEthod
?>
$ _GET : questa variabile SuperGlobal viene utilizzata per raccogliere i dati inviati dal modulo HTML con il metodo get
.
<?php
if(isset($_GET['username'])){
echo $_GET['username'];
}
//This will print value of HTML field with name username submitted using GET Method
?>
$ _POST : questa variabile SuperGlobal viene utilizzata per raccogliere i dati inviati dal modulo HTML con il metodo post
.
<?php
if(isset($_POST['username'])){
echo $_POST['username'];
}
//This will print value of HTML field with name username submitted using POST Method
?>
$ _FILES : questa variabile SuperGlobal contiene le informazioni dei file caricati tramite il metodo HTTP Post.
<?php
if($_FILES['picture']){
echo "<pre>";
print_r($_FILES['picture']);
echo "</pre>";
}
/**
This will print details of the File with name picture uploaded via a form with method='post and with enctype='multipart/form-data'
Details includes Name of file, Type of File, temporary file location, error code(if any error occured while uploading the file) and size of file in Bytes.
Eg.
Array
(
[picture] => Array
(
[0] => Array
(
[name] => 400.png
[type] => image/png
[tmp_name] => /tmp/php5Wx0aJ
[error] => 0
[size] => 15726
)
)
)
*/
?>
$ _SERVER : questa variabile SuperGlobal contiene informazioni su script, intestazioni HTTP e percorsi server.
<?php
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
/**
Will print the following details
on my local XAMPP
Array
(
[MIBDIRS] => C:/xampp/php/extras/mibs
[MYSQL_HOME] => \xampp\mysql\bin
[OPENSSL_CONF] => C:/xampp/apache/bin/openssl.cnf
[PHP_PEAR_SYSCONF_DIR] => \xampp\php
[PHPRC] => \xampp\php
[TMP] => \xampp\tmp
[HTTP_HOST] => localhost
[HTTP_CONNECTION] => keep-alive
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_UPGRADE_INSECURE_REQUESTS] => 1
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*;q=0.8
[HTTP_ACCEPT_ENCODING] => gzip, deflate, sdch
[HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
[PATH] => C:\xampp\php;C:\ProgramData\ComposerSetup\bin;
[SystemRoot] => C:\Windows
[COMSPEC] => C:\Windows\system32\cmd.exe
[PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
[WINDIR] => C:\Windows
[SERVER_SIGNATURE] => Apache/2.4.16 (Win32) OpenSSL/1.0.1p PHP/5.6.12 Server at localhost Port 80
[SERVER_SOFTWARE] => Apache/2.4.16 (Win32) OpenSSL/1.0.1p PHP/5.6.12
[SERVER_NAME] => localhost
[SERVER_ADDR] => ::1
[SERVER_PORT] => 80
[REMOTE_ADDR] => ::1
[DOCUMENT_ROOT] => C:/xampp/htdocs
[REQUEST_SCHEME] => http
[CONTEXT_PREFIX] =>
[CONTEXT_DOCUMENT_ROOT] => C:/xampp/htdocs
[SERVER_ADMIN] => postmaster@localhost
[SCRIPT_FILENAME] => C:/xampp/htdocs/abcd.php
[REMOTE_PORT] => 63822
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /abcd.php
[SCRIPT_NAME] => /abcd.php
[PHP_SELF] => /abcd.php
[REQUEST_TIME_FLOAT] => 1469374173.88
[REQUEST_TIME] => 1469374173
)
*/
?>
$ _ENV : Questo ambiente variabile SuperGlobal Shell Variabile dettagli sotto il quale il PHP è in esecuzione.
$ _COOKIE : questa variabile SuperGlobal viene utilizzata per recuperare il valore del cookie con una determinata chiave.
<?php
$cookie_name = "data";
$cookie_value = "Foo Bar";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not set!";
}
else {
echo "Cookie '" . $cookie_name . "' is set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}
/**
Output
Cookie 'data' is set!
Value is: Foo Bar
*/
?>
$ _SESSION : questa variabile SuperGlobal viene utilizzata per impostare e recuperare il valore della sessione che è memorizzato sul server.
<?php
//Start the session
session_start();
/**
Setting the Session Variables
that can be accessed on different
pages on save server.
*/
$_SESSION["username"] = "John Doe";
$_SESSION["user_token"] = "d5f1df5b4dfb8b8d5f";
echo "Session is saved successfully";
/**
Output
Session is saved successfully
*/
?>
Spiegati i sottotermici
introduzione
In parole povere, queste sono variabili disponibili in tutti gli ambiti negli script.
Ciò significa che non è necessario passarli come parametri nelle funzioni o memorizzarli al di fuori di un blocco di codice per averli disponibili in ambiti diversi.
Cos'è un superglobale ??
Se stai pensando che questi sono come i supereroi, non lo sono.
A partire dalla versione 7.1.3 di PHP ci sono 9 variabili superglobali. Sono come segue:
-
$GLOBALS
- Riferimenti a tutte le variabili disponibili nell'ambito globale -
$_SERVER
- Informazioni sull'ambiente del server e di esecuzione -
$_GET
- Variabili GET HTTP -
$_POST
- Variabili POST HTTP -
$_FILES
- Variabili di caricamento file HTTP -
$_COOKIE
- Cookie HTTP -
$_SESSION
- Variabili di sessione -
$_REQUEST
- Variabili richieste HTTP -
$_ENV
- Variabili d'ambiente
Vedi la documentazione .
Dimmi di più, dimmi di più
Mi dispiace per il riferimento a Grease! collegamento
È ora di dare una spiegazione a questi super eroi globali.
$GLOBALS
Un array associativo contenente riferimenti a tutte le variabili attualmente definite nell'ambito globale dello script. I nomi delle variabili sono le chiavi dell'array.
Codice
$myGlobal = "global"; // declare variable outside of scope
function test()
{
$myLocal = "local"; // declare variable inside of scope
// both variables are printed
var_dump($myLocal);
var_dump($GLOBALS["myGlobal"]);
}
test(); // run function
// only $myGlobal is printed since $myLocal is not globally scoped
var_dump($myLocal);
var_dump($myGlobal);
Produzione
string 'local' (length=5)
string 'global' (length=6)
null
string 'global' (length=6)
Nell'esempio precedente $myLocal
non viene visualizzato la seconda volta perché viene dichiarato all'interno della funzione test()
e quindi distrutto dopo la chiusura della funzione.
Diventare globali
Per rimediare ci sono due opzioni.
Opzione uno: parola chiave global
function test()
{
global $myLocal;
$myLocal = "local";
var_dump($myLocal);
var_dump($GLOBALS["myGlobal"]);
}
La parola chiave global
è un prefisso su una variabile che lo costringe a far parte dell'ambito globale.
Si noti che non è possibile assegnare un valore a una variabile nella stessa istruzione della parola chiave globale. Quindi, perché dovevo assegnare un valore sotto. (È possibile se rimuovi nuove linee e spazi ma non penso che sia pulito. global $myLocal; $myLocal = "local"
).
Opzione due: $GLOBALS
array
function test()
{
$GLOBALS["myLocal"] = "local";
$myLocal = $GLOBALS["myLocal"];
var_dump($myLocal);
var_dump($GLOBALS["myGlobal"]);
}
In questo esempio ho riassegnato $myLocal
il valore di $GLOBAL["myLocal"]
poiché trovo più semplice scrivere un nome di variabile piuttosto che l'array associativo.
$_SERVER
$ _SERVER è un array che contiene informazioni come intestazioni, percorsi e posizioni di script. Le voci in questo array sono create dal server web. Non vi è alcuna garanzia che tutti i server Web forniscano qualcuna di queste; i server possono omettere alcuni o fornire altri non elencati qui. Detto questo, un gran numero di queste variabili sono spiegate nella specifica CGI / 1.1 , quindi dovresti essere in grado di aspettarle.
Un esempio di output di questo potrebbe essere il seguente (eseguito sul mio PC Windows utilizzando WAMP)
C:\wamp64\www\test.php:2:
array (size=36)
'HTTP_HOST' => string 'localhost' (length=9)
'HTTP_CONNECTION' => string 'keep-alive' (length=10)
'HTTP_CACHE_CONTROL' => string 'max-age=0' (length=9)
'HTTP_UPGRADE_INSECURE_REQUESTS' => string '1' (length=1)
'HTTP_USER_AGENT' => string 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36' (length=110)
'HTTP_ACCEPT' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' (length=74)
'HTTP_ACCEPT_ENCODING' => string 'gzip, deflate, sdch, br' (length=23)
'HTTP_ACCEPT_LANGUAGE' => string 'en-US,en;q=0.8,en-GB;q=0.6' (length=26)
'HTTP_COOKIE' => string 'PHPSESSID=0gslnvgsci371ete9hg7k9ivc6' (length=36)
'PATH' => string 'C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\Program Files\ATI Technologies\ATI.ACE\Core-Static;E:\Program Files\AMD\ATI.ACE\Core-Static;C:\Program Files (x86)\AMD\ATI.ACE\Core-Static;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Intel\Intel(R) Managemen'... (length=1169)
'SystemRoot' => string 'C:\WINDOWS' (length=10)
'COMSPEC' => string 'C:\WINDOWS\system32\cmd.exe' (length=27)
'PATHEXT' => string '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY' (length=57)
'WINDIR' => string 'C:\WINDOWS' (length=10)
'SERVER_SIGNATURE' => string '<address>Apache/2.4.23 (Win64) PHP/7.0.10 Server at localhost Port 80</address>' (length=80)
'SERVER_SOFTWARE' => string 'Apache/2.4.23 (Win64) PHP/7.0.10' (length=32)
'SERVER_NAME' => string 'localhost' (length=9)
'SERVER_ADDR' => string '::1' (length=3)
'SERVER_PORT' => string '80' (length=2)
'REMOTE_ADDR' => string '::1' (length=3)
'DOCUMENT_ROOT' => string 'C:/wamp64/www' (length=13)
'REQUEST_SCHEME' => string 'http' (length=4)
'CONTEXT_PREFIX' => string '' (length=0)
'CONTEXT_DOCUMENT_ROOT' => string 'C:/wamp64/www' (length=13)
'SERVER_ADMIN' => string '[email protected]' (length=29)
'SCRIPT_FILENAME' => string 'C:/wamp64/www/test.php' (length=26)
'REMOTE_PORT' => string '5359' (length=4)
'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
'REQUEST_METHOD' => string 'GET' (length=3)
'QUERY_STRING' => string '' (length=0)
'REQUEST_URI' => string '/test.php' (length=13)
'SCRIPT_NAME' => string '/test.php' (length=13)
'PHP_SELF' => string '/test.php' (length=13)
'REQUEST_TIME_FLOAT' => float 1491068771.413
'REQUEST_TIME' => int 1491068771
C'è molto da prendere lì, quindi selezionerò alcuni importanti qui sotto. Se si desidera leggerli, consultare la sezione degli indici della documentazione.
Potrei aggiungerli tutti sotto un giorno. O qualcuno può editare e aggiungere una buona spiegazione in basso? Suggerimento, suggerimento ;)
Per tutte le spiegazioni di seguito, supponiamo che l'URL sia http://www.example.com/index.php
-
HTTP_HOST
- L'indirizzo dell'host.
Ciò restituirebbewww.example.com
-
HTTP_USER_AGENT
- Contenuto del programma utente. Questa è una stringa che contiene tutte le informazioni sul browser del client, incluso il sistema operativo. -
HTTP_COOKIE
- Tutti i cookie in una stringa concatenata, con un delimitatore di punto e virgola. -
SERVER_ADDR
- L'indirizzo IP del server, di cui è in esecuzione lo script corrente.
Ciò restituirebbe93.184.216.34
-
PHP_SELF
- Il nome del file dello script attualmente eseguito, relativo alla root del documento.
Questo restituirebbe/index.php
-
REQUEST_TIME_FLOAT
- Il timestamp dell'inizio della richiesta, con precisione microseconda. Disponibile da PHP 5.4.0. -
REQUEST_TIME
- Il timestamp dell'inizio della richiesta. Disponibile da PHP 5.1.0.
$_GET
Una serie associativa di variabili passate allo script corrente tramite i parametri URL.
$_GET
è un array che contiene tutti i parametri URL; questi sono ciò che è dopo il? nell'URL.
Come esempio, http://www.example.com/index.php?myVar=myVal . Queste informazioni da questo URL possono essere ottenute accedendo in questo formato $_GET["myVar"]
e il risultato di questo sarà myVal
.
Usando un codice per quelli che non amano leggere.
// URL = http://www.example.com/index.php?myVar=myVal
echo $_GET["myVar"] == "myVal" ? "true" : "false"; // returns "true"
L'esempio sopra fa uso dell'operatore ternario .
Questo mostra come puoi accedere al valore dall'URL usando $_GET
superglobal.
Ora un altro esempio! respiro
// URL = http://www.example.com/index.php?myVar=myVal&myVar2=myVal2
echo $_GET["myVar"]; // returns "myVal"
echo $_GET["myVar2"]; // returns "myVal2"
È possibile inviare più variabili tramite l'URL separandole con un carattere di &
commerciale ( &
).
Rischio per la sicurezza
È molto importante non inviare alcuna informazione sensibile tramite l'URL poiché rimarrà nella cronologia del computer e sarà visibile a chiunque possa accedere a quel browser.
$_POST
Un array associativo di variabili passate allo script corrente tramite il metodo POST HTTP quando si utilizza application / x-www-form-urlencoded o multipart / form-data come HTTP Content-Type nella richiesta.
Molto simile a $_GET
in quanto i dati vengono inviati da un luogo a un altro.
Inizierò andando direttamente a un esempio. (Ho omesso l'attributo action in quanto ciò invierà le informazioni alla pagina in cui si trova il modulo).
<form method="POST">
<input type="text" name="myVar" value="myVal" />
<input type="submit" name="submit" value="Submit" />
</form>
Sopra è un modulo di base per cui i dati possono essere inviati. In un ambiente reale l'attributo value
non verrebbe impostato, il che significa che il modulo sarebbe vuoto. Ciò quindi invierebbe qualsiasi informazione inserita dall'utente.
echo $_POST["myVar"]); // returns "myVal"
Rischio per la sicurezza
Anche l'invio di dati tramite POST non è sicuro. L'utilizzo di HTTPS garantisce che i dati siano mantenuti più sicuri.
$_FILES
Un array associativo di elementi caricati nello script corrente tramite il metodo HTTP POST. La struttura di questo array è descritta nella sezione caricamento dei metodi POST .
Iniziamo con un modulo di base.
<form method="POST" enctype="multipart/form-data">
<input type="file" name="myVar" />
<input type="submit" name="Submit" />
</form>
Nota che ho omesso l'attributo action
(ancora!). Inoltre, ho aggiunto enctype="multipart/form-data"
, questo è importante per qualsiasi modulo che si occuperà di upload di file.
// ensure there isn't an error
if ($_FILES["myVar"]["error"] == UPLOAD_ERR_OK)
{
$folderLocation = "myFiles"; // a relative path. (could be "path/to/file" for example)
// if the folder doesn't exist then make it
if (!file_exists($folderLocation)) mkdir($folderLocation);
// move the file into the folder
move_uploaded_file($_FILES["myVar"]["tmp_name"], "$folderLocation/" . basename($_FILES["myVar"]["name"]));
}
Questo è usato per caricare un file. A volte potresti voler caricare più di un file. Un attributo esiste per questo, si chiama multiple
.
C'è un attributo per qualsiasi cosa . Mi dispiace
Di seguito è riportato un esempio di modulo che invia più file.
<form method="POST" enctype="multipart/form-data">
<input type="file" name="myVar[]" multiple="multiple" />
<input type="submit" name="Submit" />
</form>
Nota le modifiche apportate qui; ce ne sono solo alcuni.
- Il nome di
input
ha parentesi quadre. Questo perché ora è una matrice di file e quindi stiamo dicendo al form di creare una matrice di file selezionati. Se si omettono le parentesi quadre, il secondo file verrà impostato su$_FILES["myVar"]
. - L'attributo
multiple="multiple"
. Questo dice solo al browser che gli utenti possono selezionare più di un file.
$total = isset($_FILES["myVar"]) ? count($_FILES["myVar"]["name"]) : 0; // count how many files were sent
// iterate over each of the files
for ($i = 0; $i < $total; $i++)
{
// there isn't an error
if ($_FILES["myVar"]["error"][$i] == UPLOAD_ERR_OK)
{
$folderLocation = "myFiles"; // a relative path. (could be "path/to/file" for example)
// if the folder doesn't exist then make it
if (!file_exists($folderLocation)) mkdir($folderLocation);
// move the file into the folder
move_uploaded_file($_FILES["myVar"]["tmp_name"][$i], "$folderLocation/" . basename($_FILES["myVar"]["name"][$i]));
}
// else report the error
else switch ($_FILES["myVar"]["error"][$i])
{
case UPLOAD_ERR_INI_SIZE:
echo "Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.";
break;
case UPLOAD_ERR_FORM_SIZE:
echo "Value: 2; The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
break;
case UPLOAD_ERR_PARTIAL:
echo "Value: 3; The uploaded file was only partially uploaded.";
break;
case UPLOAD_ERR_NO_FILE:
echo "Value: 4; No file was uploaded.";
break;
case UPLOAD_ERR_NO_TMP_DIR:
echo "Value: 6; Missing a temporary folder. Introduced in PHP 5.0.3.";
break;
case UPLOAD_ERR_CANT_WRITE:
echo "Value: 7; Failed to write file to disk. Introduced in PHP 5.1.0.";
break;
case UPLOAD_ERR_EXTENSION:
echo "Value: 8; A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with phpinfo() may help. Introduced in PHP 5.2.0.";
break;
default:
echo "An unknown error has occured.";
break;
}
}
Questo è un esempio molto semplice e non gestisce problemi come estensioni di file non consentite o file con codice PHP (come un equivalente PHP di un'iniezione SQL). Vedi la documentazione .
Il primo processo sta controllando se ci sono dei file, e in tal caso, impostane il numero totale in $total
.
L'utilizzo del ciclo for consente un'iterazione dell'array $_FILES
e l'accesso a ciascun elemento uno alla volta. Se quel file non incontra un problema, allora l'istruzione if è vera e viene eseguito il codice dal caricamento del singolo file.
Se si verifica un problema, il blocco di commutazione viene eseguito e viene presentato un errore in base all'errore per quel particolare caricamento.
$_COOKIE
Una serie associativa di variabili passate allo script corrente tramite i cookie HTTP.
I cookie sono variabili che contengono dati e sono memorizzati sul computer del cliente.
A differenza dei superglobali summenzionati, i cookie devono essere creati con una funzione (e non assegnare un valore). La convenzione è sotto
setcookie("myVar", "myVal", time() + 3600);
In questo esempio viene specificato un nome per il cookie (in questo esempio è "myVar"), viene fornito un valore (in questo esempio è "myVal", ma è possibile passare una variabile per assegnarne il valore al cookie), e quindi viene data una scadenza (in questo esempio è un'ora dal momento in cui 3600 secondi è un minuto).
Nonostante la convenzione per la creazione di un cookie diverso, è accessibile allo stesso modo degli altri.
echo $_COOKIE["myVar"]; // returns "myVal"
Per distruggere un cookie, setcookie
deve essere chiamato di nuovo, ma il tempo di scadenza è impostato su qualsiasi momento nel passato. Vedi sotto.
setcookie("myVar", "", time() - 1);
var_dump($_COOKIE["myVar"]); // returns null
Questo annullerà i cookie e lo rimuoverà dal computer client.
$_SESSION
Un array associativo contenente le variabili di sessione disponibili per lo script corrente. Vedere la documentazione delle funzioni di sessione per ulteriori informazioni su come questo viene utilizzato.
Le sessioni sono molto simili ai cookie, tranne che sono lato server.
Per utilizzare le sessioni è necessario includere session_start()
nella parte superiore degli script per consentire l'utilizzo delle sessioni.
L'impostazione di una variabile di sessione è uguale all'impostazione di qualsiasi altra variabile. Vedi l'esempio qui sotto.
$_SESSION["myVar"] = "myVal";
Quando si avvia una sessione, un ID casuale viene impostato come cookie e chiamato "PHPSESSID" e conterrà l'ID di sessione per quella sessione corrente. È possibile accedere a questo chiamando la funzione session_id()
.
È possibile distruggere le variabili di sessione usando la funzione unset
(tale che unset($_SESSION["myVar"])
distruggerebbe quella variabile).
L'alternativa è chiamare session_destory()
. Questo distruggerà l'intera sessione, il che significa che tutte le variabili di sessione non esisteranno più.
$_REQUEST
Un array associativo che per impostazione predefinita contiene i contenuti di
$_GET
,$_POST
e$_COOKIE
.
Come afferma la documentazione di PHP, questo è solo un confronto di $_GET
, $_POST
e $_COOKIE
tutto in una variabile.
Poiché è possibile che tutti e tre gli array abbiano un indice con lo stesso nome, esiste un'impostazione nel file php.ini
chiamato request_order
che può specificare quale dei tre ha la precedenza.
Ad esempio, se è stato impostato su "GPC"
, verrà utilizzato il valore di $_COOKIE
, poiché viene letto da sinistra a destra, il che significa che $_REQUEST
imposterà il suo valore su $_GET
, quindi $_POST
e quindi $_COOKIE
e dato che $_COOKIE
è l'ultimo che è il valore che è in $_REQUEST
.
Vedi questa domanda
$_ENV
Un array associativo di variabili passato allo script corrente tramite il metodo environment.
Queste variabili vengono importate nello spazio dei nomi globale di PHP dall'ambiente in cui è in esecuzione il parser PHP. Molti sono forniti dalla shell in cui PHP è in esecuzione e diversi sistemi sono probabilmente in esecuzione con diversi tipi di shell, un elenco definitivo è impossibile. Si prega di consultare la documentazione della shell per un elenco di variabili d'ambiente definite.
Altre variabili di ambiente includono le variabili CGI, posizionate lì indipendentemente dal fatto che PHP sia in esecuzione come modulo server o processore CGI.
Tutto ciò che è contenuto in $_ENV
proviene dall'ambiente in cui è in esecuzione PHP.
$_ENV
viene popolato solo se php.ini
consente.
Vedi questa risposta per maggiori informazioni sul perché $_ENV
non è popolato.