Zmienne superglobalne są używane do przekazywania globalnego stanu aplikacji i komunikacji HTTP.
Główną zaletą tych zmiennych jest to, że są one zawsze i wszędzie dostępne. W praktyce są to tablice wartości, w których dostęp do określonych informacji uzyskuje się za pomocą indeksu. W różnych kontekstach dostępność kluczy może być różna (wyjaśnienie poniżej).
Wszystkie superglobale w PHP są tablicami i są oznaczane znakiem dolara, po którym następuje podkreślnik (z wyjątkiem $GLOBALS
) i wielkie litery.
W PHP 7
występują w szczególności następujące elementy:
Zmienna | Opis |
---|---|
$_GET |
Parametry adresu URL wysłane metodą GET. |
$_POST |
Dane formularza wysłane przez POST. Zwróć uwagę, że może zachowywać się inaczej w ajaxie. |
$_REQUEST |
Dane formularza wysłane dowolną metodą ($_GET , $_POST i $_REQUEST ). |
$_FILES |
Informacje techniczne o aktualnie załadowanych plikach, na przykład poprzez konstrukcję <input type="file"> . |
$_SERVER |
ustawienia serwera WWW, adres IP, konfiguracja... różni się w zależności od środowiska (przy wywoływaniu skryptu PHP z Terminala będzie zawierał inne wartości i na przykład będzie brakowało informacji o bieżącym żądaniu). |
$_COOKIE |
Skonfigurowane cookies. |
$_SESSION |
Dane sesji (session), jeśli istnieje i została ustawiona w przeszłości. |
$GLOBALS |
Ostrzeżenie, nie zawiera podkreślenia w nazwie! Jest to tak zwana globalna zmienna i alternatywna notacja dla słowa kluczowego globalny . Jeśli masz w swojej aplikacji zmienną globalną $zmienna , możesz również uzyskać do niej dostęp za pomocą konstrukcji $GLOBALS["zmienna"] . Jednak używanie zmiennych globalnych jest z założenia złym i nieczystym rozwiązaniem, więc lepiej tego nie robić. |
$_ENV |
Informacje o bieżącym środowisku, w którym PHP jest uruchomione. |
Wypisanie wszystkich istniejących wartości jest łatwe do wykonania:
foreach ($_SERVER as $key => $value {echo $key . ':' . $value . '<br>.';}
Uwaga: Nie wszystkie indeksy muszą istnieć zawsze (na przykład jeśli skrypt uruchamia crona w trybie CLI, indeks z adresem URL strony lub adresem IP żądania nie będzie istniał).
Zalecam, aby wszystkie zmienne globalne (z wyjątkiem $_SESSION
) były tylko do odczytu. Dzieje się tak dlatego, że zawierają one globalne dane aplikacji i inny kod może je uwzględniać (na przykład inna zainstalowana biblioteka).
Inną wadą stanu globalnego jest to, że nie zawsze można polegać na dokładnych wartościach, nawet jeśli one istnieją, więc zawsze należy sprawdzać ich klucze za pomocą konstrukcji isset()
.
Aby zapisać nowy plik cookie, należy użyć setcookie()
, a nie wstawiać wartość bezpośrednio. Dzieje się tak, ponieważ jest to funkcja tylko do odczytu.
Nigdy nie należy ślepo ufać wartościom zmiennych superglobalnych!
Użytkownik może użyć adresu URL i przesłanych nagłówków, aby wpłynąć na sposób ustawiania wartości. Wszystkie dane wejściowe powinny być zawsze starannie zatwierdzane.
W starej wersji PHP (aż do 5.4.0
) istniała specjalna dyrektywa register-globals
(konfigurowalna w php.ini
), która powodowała, że wszystkie parametry przekazywane w adresie URL były automatycznie rejestrowane jako zmienne.
Na przykład:
Użytkownik wszedł na adres URL: https://example.com/script.php?var=24
.
PHP automatycznie utworzyło w skrypcie zmienną $var
o wartości 24
.
Tak więc działało to klasycznie:
echo $var;
Każdy może więc wrzucić dowolną zmienną do skryptu i zmienić jego treść. Oczywiście bezpieczeństwo nie zawsze było priorytetem. Nie do końca.
Bardziej szczegółowy opis można znaleźć w oficjalnym podręczniku.
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: ... | pl