Super variabili

Informazioni sul Tutorial (autore, data di revisione, ...)

Ultima data di revisione:

Autore Tutorial King Kaito Kid, membro del Team Invisible

Tutorial di PHP

Cosa sono le super variabili del PHP, come funzionano e quali sono.

Leggi il Tutorial
Introduzione

Le super variabili nel PHP hanno un ruolo molto importante perché permettono di ottenere tantissime informazioni perché il PHP è un linguaggio eseguito lato server.

Questo ha diverse implicazioni ad esempio è possibile ricavare il metodo che è stato usato per inviare delle informazioni, chi le invia, se chi le ha inviato ha usato proxy e tante altre informazioni ottenibili perché il PHP non è eseguito sulla macchina del richiedente (chi vuole accedere al sito) ma è eseguito sul server (chi hosta il vostro sito) e quindi il PHP ha accesso a determinate informazioni che lato client non si possono avere.

Ecco quali sono:

  1. $GLOBALS

  2. $_SERVER

  3. $_REQUEST

  4. $_POST

  5. $_GET

  6. $_FILES

  7. $_ENV

  8. $_COOKIE

  9. $_SESSION




Sono super variabili ma hanno un ruolo specifico e son memorizzate in modo ben preciso perché queste sono tutti array di variabili e valori associati ovvero per avere un dato bisogna scrivere $SUPERVARNAME['index'] dove 'index' è il valore che volete ottenere, sarà più chiaro nei prossimi paragrafi.

Nei vari tutorial affronteremo diverse di queste super variabili, vediamo quelle più comuni, semplici da comprendere.


Super-variabile: $GLOBALS

Il GLOBALS permette di dichiarare delle variabili come GLOBALI, questo avviene automaticamente ma ogni dichiarazione di variabile fuori da una funzione è intesa come GLOBALE.

Questo ha senso solo se si è internamente ad una funzione, i Tutorial del PHP non si soffermano troppo sulle basi di programmazione alcuni concetti vengono dati per assodati (conoscenza di altri linguaggi di programmazione come C, Java, JavaScript, Python, C++, C#, ...) perché il PHP essendo lato server ha complicazioni su determinati aspetti e offre funzionalità avanzate che nessun linguaggio client può fare.

Vediamo questo piccolo codice

Mostra / Nascondi il codice

$FirstPT = "Hello";
function EndString($LastPT)

{

$GLOBALS['FinalString'] = $GLOBALS['FirstPT']." ".$LastPT;

}
EndString("Kaito Kid");

echo $FinalString;

Sembra un codice difficilissimo ma è semplice, in primis c'è una novità che è stata utilizzata ovvero: conctenazione di stringhe che in senso letterale è la creazione di una catena unica di parole (che nel nostro linguaggio si tramuta in frasi), prima avevamo parole separate poi le abbiamo unite in una stringa finale che è composta dalle due parole che avevamo inizialmente.

In PHP la concatenzione si fa con il . (punto), in altri linguaggi (come JavaScript e Python) si usa il + (operatore di somma o "più"), quando si uniscono stringhe fatte con delle variabili è buona regola interrompere la stringa originale, mettere il punto, mettere il nome della variabile, mettere il punto e proseguire con la stringa o altre variabili.

Il PHP è di alto livello e non essendo tipato la concatenazione di stringhe può avvenire direttamente senza dover interrompere la stringa stessa, ecco un esempio di concatenazione fatta con i due modi descritti (che sono equivalenti):
Mostra / Nascondi il codice

"I am a string and my name is ".$VarName.", cool ?";

"I am a string and my name is $VarName, cool ?";


Ovviamente sono equivalenti le cose se non dovete fare cose strane, se dovete fare cose strane (che vedremo in futuro) allora è meglio seguire il primo tipo di concatenazione, in alcuni casi è meglio fare il secondo tipo di concatenazione.


Detto questo la funzione non ha bisogno di essere spiegata troppo perché non ha un return ovvero un valore di ritorno ma ha solo una echo ovvero stampa a video.


Dunque il nostro output sarà questo: Hello Kaito Kid o quello che volete al posto di Kaito Kid.


La vera domanda è la seguente: com'è possibile che viene stampata a video la variabile $FinalString?

A rigor di logica dovrebbe dare un errore perché la variabile non viene trovata.

Ecco altra caratteristica del PHP, se voi usate una variabile che non esiste il PHP semplicemente la ignora fa finta che non l'avete usata (perché tutti i linguaggi di alto livello hanno le ottimizzazioni del codice e quindi quello che scrivete voi è diverso da quello che la macchina sta eseguendo perché i compilatori sono intelligenti e riescono a modificare il codice senza modificare l'output stesso, alcuni casi estremi ci sono ovviamente ma sono estremi).


La vera risposta è data dalla funzione stessa e come è stata dichiarata la variabile $FinalString, come vedete nella funzione la variabile non è stata dichiarata locale alla funzione (ovvero non è stata dichiarata come $FinalString = code;) ma come $GLOBALS['FinalString'] quindi tale variabile non è solo accessibile dalla funzione ma è accessibile da qualsiasi parte del vostro codice PHP perché quella variabile appartiene all'array delle super variabili GLOBALI e qualsiasi cosa sia presente in questo array è accessibile da qualsiasi parte del codice.


Super-variabile: $_SERVER

Con $GOBALS abbiamo qualcosa che non caratterizza il PHP perché dopotutto è solo un modo diverso di memorizzare le variabili e come vengono trattate, ogni linguaggio ha le sue peculiarità e in virtù di ciò tutto il resto si adegua a questa cosa.


Questa è la nuova super variabile caratteristica del PHP ovvero $_SERVER e identifica tutti i dati che il vostro server ha ricevuto come gli headers, path, scripts, ...

Qui ci sono tantissime cose da scrivere ma non le utilizzerete davvero tutte quindi vi mostrerò un esempio più frequente ma vi rimando al manuale ufficiale del PHP per approfondire meglio questa Super variabile $_SERVER

Sicuramente voi sarete curiosi di sapere il vostro link da cosa è stato aperto e tale informazione viene memorizzata sotto nome di HTTP_REFERER e se il vostro link è stato aperto da DuckDuckGo.com allora vi apparirà tale sito, qui ci sarebbe molto da dire in merito al link stesso e perché aprire il proprio sito da Google significa aumentare la tracciabilità e fornire dati al sito in merito alle vostre ricerche perché molti motori di ricerca usano il metodo GET per passare le informazioni mentre pochi (come DuckDuckGo) permettono di impostare il metodo POST per passare la ricerca, questo significa che se è stato usato il metodo GET potete vedere cosa è stato scritto cosa che non potete fare se è stato usato il POST perché tali dati non sono presenti nel link.

Se volete ottenere il path attuale potete usare: $_SERVER["PHP_SELF"] oppure $_SERVER["SCRIPT_NAME"], ad esempio dal seguente link https://intelligenteva.altervista.org/tutorial/83 otterrei tutorial/83, le differenze oggi non esistono ma usare $_SERVER["SCRIPT_NAME"] è preferibile perché segue uno standard ed è compatibile con CGI 1 mentre l'altro è implementato da PHP e potrebbe cambiare nel tempo visto che non segue uno standard.

Altra informazione è il browser usato dall'utente e dalla versione del motore utilizzato (Chromium, Webkit, Gecko, ...) e tale informazione è memorizzata in $_SERVER["HTTP_USER_AGENT"] e un esempio di output sarebbe il seguente Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15

$_SERVER["REQUEST_METHOD"] permette di sapere se il metodo per inviare dati è GET o POST, $_SERVER["REQUEST_TIME"] ottiene l'orario in formato unixtime (ovvero quanti secondi son passati dal 1 Gennaio 1970 12:00AM o 00:00:00) mentre $_SERVER["REMOTE_ADDR"] ritorna l'IP Address del client che sta vedendo la pagina (se usa un proxy o VPN non è quello del client ma del server VPN o Proxy).


Super-variabile: $_REQUEST, $_POST, $_GET

Il PHP è bello perché permette di organizzare gli input provenienti dalle form in modo ben preciso ed organizzato e vediamo come.


$_REQUEST



In questa super variabile sono presenti tutti i dati che sono arrivati al sito (dalle form) e non importa con quale metodo (che dalle form è specificato come action), questo significa che qualsiasi metodo venga utilizzato comunque il PHP potrà leggere il suo contenuto, utile quando avete una pagina "centrale" che prende gli input e fa le dovute analisi, fortemente sconsigliato utilizzarlo.


$_POST



Simile a $_REQUEST ma prende solo input che sono stati passati con il metodo POST.

$_GET



Simile a $_REQUEST ma prende solo input che sono stati passati con il metodo GET.




Ad esempio se una form passa come informazione un campo chiamato first_name allora per avere il valore associato bisogna scrivere $_REQUEST["first_name"], allo stesso modo $_GET e $_POST.
Altri Tutorial di questo linguaggio

Qui vengono mostrati tutti i Tutorial riguardo PHP, la pagia viene aggiornata.

Se vuoi cambiare linguaggio puoi farlo da questa pagina: Elenco dei Tutorial

FAQ | Curiosità
Non sono state poste domande su questo Tutorial al momento.
Se hai delle domande da fare usa la sezione dedicata e se la domanda viene posta tante volte o è importante apparirà in questa sezione dedicata alle domande.
Hai una domanda? | Contattaci

Scrivici la domanda e come vuoi essere ricontattato

Puoi comunicare con noi in modo diretto ma RICORDA che se vuoi essere contattato devi indicarci come farlo perché tutte le domande che ci arrivano sono tutte anonime.