Superglobale variabler bruges til at overføre global programtilstand og HTTP-kommunikation.
Den største fordel ved disse variabler er, at de altid og overalt er tilgængelige. I praksis er de arrays af værdier, hvor vi får adgang til specifikke oplysninger ved hjælp af indeks. I forskellige sammenhænge kan tilgængeligheden af nøgler variere (forklares nedenfor).
Alle superglobaler i PHP er arrays og betegnes med et dollartegn efterfulgt af en understregning (undtagen $GLOBALS
) og store bogstaver.
I PHP 7
er der bl.a. følgende:
Variabel | Beskrivelse |
---|---|
$_GET |
URL-parametre som sendes med GET-metoden |
$_POST |
Formdata sendes via POST. Bemærk, at kan opføre sig anderledes i ajax. |
$_REQUEST |
Formdata sendt med en hvilken som helst metode ($_GET , $_POST og $_REQUEST ). |
$_FILES |
Teknisk information om de aktuelt uploadede filer, f.eks. via konstruktionen <input type="file"> . |
$_SERVER |
Webserverindstillinger, IP-adresse, konfiguration... det varierer afhængigt af miljøet (når du kalder et PHP-script fra Terminal, vil det indeholde forskellige værdier, og f.eks. vil oplysninger om den aktuelle forespørgsel mangle). |
$_COOKIE |
Konfigureret cookies. |
$_SESSION |
Sessionsdata (session), hvis den findes og er blevet indstillet tidligere. |
$GLOBALS |
Varsling, den indeholder ikke en understregning i navnet! Dette er den såkaldte global-variabel og en alternativ notation for nøgleordet global . Hvis du har en global variabel $variable i dit program, kan du også få adgang til den med konstruktionen $GLOBALS["variable"] . Men at bruge globale variabler er en dårlig og uren løsning, så det er bedre ikke at gøre det. |
$_ENV |
Oplysninger om det aktuelle miljø, hvor PHP kører. |
Det er nemt at opregne alle eksisterende værdier:
foreach ($_SERVER as $key => $value {echo $key . ':' . $value . '<br>';}
Bemærk: Ikke alle indeks skal altid eksistere (hvis scriptet f.eks. kører cron i CLI-tilstand, vil indekset med sidens URL-adresse eller IP-adressen for anmodningen ikke eksistere).
Jeg anbefaler, at alle globale variabler (undtagen $_SESSION
) er skrivebeskyttede. Det skyldes, at de indeholder globale programdata, og at anden kode kan tage hensyn til disse data (f.eks. et andet installeret bibliotek).
En anden ulempe ved global tilstand er, at du ikke altid kan stole på nøjagtige værdier, selv om de findes, så du bør altid kontrollere deres nøgler med isset()
-konstruktionen.
Hvis du vil gemme en ny cookie, skal du bruge setcookie()
og ikke indsætte værdien direkte. Det skyldes, at den er skrivebeskyttet.
Stol aldrig blindt på værdierne af superglobale variabler!
Brugeren kan bruge URL'en og de sendte overskrifter til at påvirke, hvordan værdierne indstilles. Alle input bør altid valideres omhyggeligt.
I den gamle version af PHP (op til 5.4.0
) var der et specielt register-globals
-direktiv (konfigurerbart i php.ini
), som fik alle overførte parametre i en URL til automatisk at blive registreret som variabler.
For eksempel:
En bruger kom til URL'en: https://example.com/script.php?var=24
.
Og PHP oprettede automatisk en variabel $var
med værdien 24
i scriptet.
Så det fungerede på klassisk vis:
echo $var;
Enhver kan derfor indsætte en hvilken som helst variabel i scriptet og ændre dets indhold. Det er klart, at sikkerhed ikke altid har været en prioritet. Ikke rigtig.
Du kan finde en mere detaljeret beskrivelse i officielle manual.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | da