Superglobálne premenné sa používajú na odovzdávanie globálneho stavu aplikácie a komunikácie HTTP.
Hlavnou výhodou týchto premenných je, že sú vždy a všade k dispozícii. V praxi ide o polia hodnôt, v ktorých pristupujeme ku konkrétnym informáciám pomocou indexu. V rôznych kontextoch sa dostupnosť kľúčov môže líšiť (vysvetlené nižšie).
Všetky superglobály v PHP sú polia a označujú sa znakom dolára, za ktorým nasleduje podčiarkovník (okrem $GLOBALS
) a veľké písmená.
V PHP 7
sú najmä tieto možnosti:
Premenná | Popis |
---|---|
$_GET |
Parametre URL zasielané metódou GET |
$_POST |
Údaje formulára odoslané prostredníctvom POST. Všimnite si, že môže sa v ajaxe správať inak. |
$_REQUEST |
Údaje formulára odoslané ľubovoľnou metódou ($_GET , $_POST a $_REQUEST ). |
$_FILES |
Technické informácie o aktuálne nahraných súboroch, napríklad prostredníctvom konštrukcie <input type="file"> |
$_SERVER |
Nastavenia webového servera, IP adresa, konfigurácia... líši sa v závislosti od prostredia (pri volaní PHP skriptu z Terminálu bude obsahovať iné hodnoty a napríklad informácia o aktuálnej požiadavke bude chýbať). |
$_COOKIE |
Nakonfigurované cookies. |
$_SESSION |
Údaje relácie (relácia), ak existujú a boli nastavené v minulosti. |
$GLOBALS |
Upozornenie, neobsahuje podčiarkovník v názve! Ide o takzvanú global-variable a alternatívny zápis pre kľúčové slovo global . Ak máte v aplikácii globálnu premennú $variable , môžete k nej pristupovať aj pomocou konštrukcie $GLOBALS["variable"] . Používanie globálnych premenných je však zlé a nečisté riešenie, takže to radšej nerobte. |
$_ENV |
Informácie o aktuálnom prostredí, v ktorom je PHP spustené. |
Zoznam všetkých existujúcich hodnôt je jednoduchý:
foreach ($_SERVER as $key => $value {echo $key . ': ' . $value . '<br>';}
Poznámka: Nie všetky indexy musia vždy existovať (napríklad ak skript spustí cron v režime CLI, index s adresou URL stránky alebo IP adresou požiadavky nebude existovať).
Odporúčam, aby všetky globálne premenné (okrem $_SESSION
) boli len na čítanie. Je to preto, lebo obsahujú globálne údaje aplikácie a iný kód ich môže brať do úvahy (napríklad iná nainštalovaná knižnica).
Ďalšou nevýhodou globálneho stavu je, že sa nemôžete vždy spoľahnúť na presné hodnoty, aj keď existujú, takže by ste mali vždy kontrolovať ich kľúče pomocou konštrukcie isset()
.
Ak chcete uložiť nový súbor cookie, použite funkciu setcookie()
a nevkladajte hodnotu priamo. Je to preto, že je určený len na čítanie.
Nikdy slepo nedôverujte hodnotám superglobálnych premenných!
Používateľ môže pomocou adresy URL a odoslaných hlavičiek ovplyvniť spôsob nastavenia hodnôt. Všetky vstupy by sa mali vždy starostlivo overiť.
V starej verzii PHP (do verzie 5.4.0
) existovala špeciálna direktíva register-globals
(nastaviteľná v súbore php.ini
), ktorá spôsobila, že všetky odovzdané parametre v URL boli automaticky zaregistrované ako premenné.
Napríklad:
Používateľ prišiel na adresu URL: https://example.com/script.php?var=24
PHP automaticky vytvorilo v skripte premennú $var
s hodnotou 24
.
Takže to fungovalo klasicky:
echo $var;
Ktokoľvek by teda mohol do skriptu vložiť akúkoľvek premennú a zmeniť jej obsah. Samozrejme, bezpečnosť nebola vždy prioritou. Nie celkom.
Podrobnejší popis nájdete v oficiálnej príručke.
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: ... | sk