Téma, které nedá začátečníkům spát...
Toto téma není zase tak strašné, jaké se může zdát, ale přesto není dobré ho podceňovat.
Co to je?
Superglobální proměnné (můžete vidět i jenom globální proměnné) jsou speciálním druhem proměnných (resp. polí, viz dále), které máte k dispozici v každém scriptu (ne však vždy všechny). V některých máte informace o serveru či klientovi, jinde zase odkazy na všechny proměnné ...
Superglobální proměnné můžete používat za každé situace. Ve starších verzích PHP (ale i v nových - záleží na nastavení) byla zapnuta v php.ini volba register_globals. To způsobovalo, že veškeré proměnné, které by se jinak nacházaly jenom v superglobálních polích, byly dostupné i pod holou proměnnou (např. $remote_addr, ekv. $_SERVER['REMOTE_ADDR']). Při použití těchto proměnných se snižovala bezpečnost aplikace a zvyšovala se možnost podvrhnout hodnotu proměnné (např. očekáváte proměnnou metodou POST, kdežto útočník Vám ji podvrhne metodou GET a Vy přesto nic nepoznáte). Proto je nanejvýš vhodné používat superglobální proměnné. Ušetříte si s tím hodně práce a možných problémů.
Superglobálních proměnných máme 9:
Proměnná Význam || obsah $GLOBALS všechny běžně používané proměnné v PHP (i všechny superglobální proměnné, vč. $GLOBALS) $_SERVER různé systémové proměnné; údaje o serveru i uživateli $_ENV proměnné poskytované skriptu z prostředí. Téměř nepoužívané, ani my je používat nebudeme. $_POST proměnné poskytované skriptu přes HTTP POST (nejčastěji odesláním formuláře (téma příštího článku)) $_GET proměnné poskytované skriptu přes HTTP GET (tj. přes adresní řádek) $_COOKIE proměnné poskytované skriptu přes HTTP cookies $_FILES proměnné poskytované skriptu přes HTTP POST upload souborů $_REQUEST proměnné poskytované skriptu přes libovolný vstupní mechanismus (tzn. nerozlišuje POST, GET, COOKIE...) a kterým proto nelze důvěřovat $_SESSION proměnné registrované pro aktuální sezením (SESSION se budeme věnovat popříště)
Tak to byl seznam superglobálních proměnných. Dnes nebudeme rozebírat všechny, jen některé, většinu rozebereme v některém z příštích článků, protože je to docela rozsáhlé téma.
$GLOBALS
Kteroukoliv proměnnou, kterou definujete, tak naleznete právě v této superglobální proměnné. Takže v podstatě, když máte register_globals na ON, tak byste zde mohli nalézt proměnné, co byste jinak hledali v superglobálních proměnných $_POST nebo $_GET (popř. jiný vstup). Ostatně, předveďme si to: // inicializujeme si dvě proměnné
Pokud si tento kód vyzkoušíte, zjistíte, že se Vám vytisklo to samé, jako kdybyste tiskli způsobem, kterým jste danou proměnnou inicializovali. Zkrátka to potvrzuje, co jsme si řekli před chvílí: v superglobální proměnné $GLOBALS jsou všechny proměnné (i pole samozřejmě), které jsou dostupné klasickým způsobem.
$normalnipromenna = "normalní text";
$GLOBALS["globalspromenna"] = "text v proměnné 'globalspromenna' v superglobální proměnné $GLOBALS";
// a teď si je vyzkoušíme:
echo "Normální proměnná jinak: {$GLOBALS["normalnipromenna"]}
";
echo "Druhá proměnná normálně: $globalspromenna
";
Závěr
Superglobální proměnné a souvislosti s nimi spojené jsou častými otázkami začátečníků. Tento článek by měl některé začít nepravidelnou sérii článků, které budou tyto otázky zodpovídat. Dnes to byl hlavně přehled superglobálních proměnných a přiblížení superglobální proměnné $GLOBALS.
Příště
Příště navážeme na toto téma a prakticky ho rozvineme. Budeme zpracovávat data získaná z formuláře (především superglobální proměnné $_POST a $_GET, ale zapleteme do toho i jiné).