Superglobální proměnné slouží k předávání globálního stavu aplikace a HTTP komunikace.
Výhoda těchto proměnných je hlavně ta, že jsou k dispozici vždy a všude. V praxi se jedná o pole hodnot, kde přistupujeme ke konkrétní informaci podle indexu. V různých kontextech se může dostupnost klíčů lišit (vysvětleno níže).
Všechny superglobální pole v PHP jsou pole a značí se dolarem následovaný podtržítkem (kromě $GLOBALS
) a velkými znaky.
V PHP 7
existují zejména tyto:
Proměnná | Popis |
---|---|
$_GET |
URL parametry odeslané metodou GET |
$_POST |
Data z formuláře odeslaná metodou POST. Pozor, při ajaxu se může chovat jinak. |
$_REQUEST |
Data z formuláře odeslaná libovolnou metodou ($_GET , $_POST a $_REQUEST ). |
$_FILES |
Technické informace o právě nahranávaných souborech, například přes konstrukci <input type="file"> |
$_SERVER |
Nastavení webového serveru, IP adresa, konfigurace... liší se podle prostředí (při zavolání PHP scriptu z Terminálu bude obsahovat jiné hodnoty a například bude chybět informace o aktuálním requestu). |
$_COOKIE |
Nastavené cookies. |
$_SESSION |
Data relace (session), pokud existuje a byla v minulosti nastavena. |
$GLOBALS |
Pozor, neobsahuje v názvu podtržítko! Jde o tzv. Globální proměnnou a alternativní zápis pro klíčové slovo global . Pokud máte v aplikaci globální proměnnou $promenna , lze k ní přistupovat taky konstrukcí $GLOBALS["promenna"] . Použití globálních proměnných je ale návrhově špatné a nečisté řešení, proto to raději nedělejte. |
$_ENV |
Informace o aktuálním prostředí, kde PHP běží. |
Vypsání všech existujících hodnot uděláme jednoduše:
foreach ($_SERVER as $key => $value {echo $key . ': ' . $value . '<br>';}
Pozor: Ne všechny indexy musí vždy existovat (například pokud script spustí cron v CLI režimu, tak nebude existovat index s URL adresou stránky nebo IP adresa requestu).
Doporučuji veškeré globální proměnné (kromě $_SESSION
) používat jen a pouze pro čtení. Obsahují totiž globální data aplikace a jiný kód s tím může počítat (například jiná nainstalovaná knihovna).
Nevýhoda globálního stavu je také v tom, že se nelze na přesné hodnoty vždy spolehnout a to dokonce ani na jejich existenci, proto jejich klíče vždy raději kontrolujte konstrukcí isset()
.
Pro uložení nové cookies použijte funkci setcookie()
a nevkládejte hodnotu přímo. Ta je totiž pouze pro čtení.
Nikdy slepě nevěřte hodnotám superglobálních proměnných!
Uživatel může pomocí URL a odeslaných hlaviček ovlivnit, jak budou hodnoty nastaveny. Veškeré vstupy je potřeba vždy pečlivě validovat.
Ve staré verzi PHP (do verze 5.4.0
) existovala speciální direktiva register-globals
(konfigurovatelné v php.ini
), která způsobovala, že se veškeré předané parametry v URL automaticky zaregistrovaly jako proměnné.
Například:
Uživatel přišel na URL: https://example.com/script.php?var=24
A PHP v rámci scriptu automaticky vytvořilo proměnnou $var
s hodnotou 24
.
Takže fungovalo klasicky:
<?phpecho $var;
Kdokoli tedy mohl do scriptu podstrčit libovolnou proměnnou a měnit její obsah. Bezpečnost evidentně nebyla vždy priorita. Notykrávo.
Podrobnější popis najdete v oficiálním manuálu.
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:
Nabízím trénink vývojářů, konzultace, školení a analýzu návrhových vzorů. Osobně v Praze nebo online.
Napište mi, pokud si nevíte rady.
Lektor: Jan Barášek
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | cs