PHP Manual
/
Variabler

Superglobale variabler

01. 11. 2019

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).

Typer af superglobale variabler

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).

Adgang til variabler

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.

Erfaringer

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.

Register globals - problemet med den gamle version af PHP

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.

Andre kilder

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:

Související články

1.
6.
Status:
All systems normal.
2024