Zmienne środowiskowe dają nam dostęp do rozmaitych danych dostarczanych przez przeglądarkę internauty, a także przekazują wiele danych o parametrach samego serwera.
Zmienne środowiskowe są bardzo pożyteczną rzeczą. Dają nam dostęp do rozmaitych danych dostarczanych przez przeglądarkę gościa wizytującego nasz serwis, a także przekazują wiele danych o parametrach samego serwera. Z pewnością warto je znać, gdyż naprawdę często przydają się w codziennej praktyce. Poniższy wykaz zawiera kilkanaście najważniejszych zmiennych środowiskowych, przy czym do niektórych z nich dołączone zostały także przykłady użycia.
Zmienne środowiskowe dostępne są poprzez superglobalną tablicę $_SERVER, która jest dostępna w każdym skrypcie. W starszych wersjach PHP zamiast niej była tablica $HTTP_SERVER_VARS, a jeszcze wcześniej - każda zmienna środowiskowa była zwyczajną zmienną. Należy o tym pamiętać, ale pod żadnym pozorem nie stosować starych metod, gdyż są one domyślnie wyłączone i tak zostawiane przez większość serwerów WWW!
$_SERVER['HTTP_USER_AGENT']
Zmienna ta zawiera sygnaturę przeglądarki, z której korzysta gość odwiedzający naszą stronę. Przy pomocy funkcji get_browser() możesz dowiedzieć się, co obsługuje przeglądarka gościa, a co nie i odpowiednio przygotować generowaną stronę. Przykład:
<?php
echo $_SERVER['HTTP_USER_AGENT'].'<hr/>';
$przeg = get_browser();
foreach ($przeg as $name => $value) {
print '<b>'.$nazwa.'</b> '.$value.'<br/>';
}
?>
Warunkiem jest jednak posiadanie pliku browscap.ini zawierającego dane o przeglądarkach, a także zdefiniowanie do niego ścieżki w pliku php.ini. Rozbudowane wersje browscap.ini można pobrać spod tego adresu:
http://www.garykeith.com/browsers/downloads.asp.
Przy pomocy tej zmiennej można także sprawdzić, czy nie odwiedza nas robot wyszukiwarki.
<?phpif(preg_match('/(googlebot|slurp@inktomi|ask jeeves|lycos|whatuseek|ia_archiver)/i', $_SERVER['HTTP_USER_AGENT'], $match)){
echo 'Odwiedził nas robot '.$match[1].'<br/>';
}else{
echo 'Wszedł człowiek<br/>';
}
?>
Adresy IP
Tutaj zainteresować powinny nas dwie zmienne środowiskowe. $_SERVER['REMOTE_ADDR'] podaje adres IP, z którego strona jest oglądana, natomiast $_SERVER['HTTP_X_FORWARDED_FOR'] w teorii zawiera właściwy adres komputera, jeżeli ten znajduje się za serwerem proxy (jego adres podaje wtedy REMOTE_ADDR). Jednak kryje się tu pewien haczyk - znajdujące się tu adresy są dostarczane nie przez nasz serwer, a przez proxy, co daje możliwość dowolnej manipulacji danymi. Dlatego w kwestiach bezpieczeństwa nie powinniśmy w ogóle polegać na tym polu - zaufanie zawartym tu informacjom było przyczyną wielu błędów zabezpieczeń w popularnym skrypcie phpBB.
Możemy także pobrać nazwę hosta komputera gościa, dzięki zmiennej $_SERVER['REMOTE_HOST'].
Dane o serwerze
Jest kilka zmiennych pozwalających nam pobrać parę ciekawych informacji o naszym serwerze. $_SERVER['SERVER_ADDR'] przechowuje adres naszego serwera. Jego nazwa dostępna jest natomiast w $_SERVER['SERVER_NAME']. Dzięki $_SERVER['SERVER_PORT'] dowiemy się, przy pomocy jakiego portu należy łączyć się z serwerem. $_SERVER['SERVER_SOFTWARE'] daje nam informacje o programie serwera HTTP (np. Apache 1.3.29). Dodatkowo w $_SERVER['SERVER_SIGNATURE'] dostajemy tzw. sygnaturę serwera, czyli połączenie wszystkich powyższych danych w jeden ciąg wyglądający mniej więcej tak:
Apache/1.3.29 Server at 192.168.1.13 Port 8000
Należy wziąć jednak poprawkę na to, iż administratorzy serwerów często zmieniają dane o oprogramowaniu serwera, by utrudnić rozpoznanie prawidłowej wersji, co mogłoby być użyte do włamania na serwer przy pomocy dziur występujących w danej wersji.
Dane o aktualnym skrypcie
Przy pomocy tych zmiennych dowiemy się wszelkich danych o położeniu naszego skryptu zarówno na dysku serwera, jak i w domenie internetowej. Jeżeli chcemy otrzymać ten pierwszy rodzaj informacji, używamy $_SERVER['PATH_TRANSLATED']. Aby uzyskać lokalizację strony w domenie internetowej, musimy już połączyć dane z kilku zmiennych, gdyż jedna, uniwersalna, nie istnieje. Musimy tylko połączyć $_SERVER['REQUEST_URI'] (adres do pliku w domenie) z informacjami o serwerze, a otrzymamy kompletny adres internetowy do naszego skryptu.
Inne informacje
Rozmaitych zmiennych jest bardzo dużo. Tu opiszę te, które nie pasują do poprzednich działów.
- $_SERVER['HTTP_REFERER'] przechowuje adres poprzednio wywołanego skryptu. Jest to szczególnie przydatne, gdy chcemy wykonać przycisk "Powrót", a nie mamy własnego mechanizmu powiadamiania, skąd przyszło żądanie.
- $_SERVER['SERVER_PROTOCOL'] zawiera informacje o protokole używanym przez serwer, np. "HTTP/1.0".
- $_SERVER['REQUEST_METHOD'] określa metodę, przy pomocy której odwołano się do strony. Przykłady: "GET" (URL), "POST" (formularz).
Zakończenie
Zmienne środowiskowe są bardzo długim tematem. Część z nich na pewno nie będzie Ci potrzebna, ale znanie kilku z nich (np. tych do obsługi adresów IP) jest raczej zalecane. Ponadto nie wszystkie serwery dostarczają te same zmienne.
Bardziej rozbudowany, lecz również i bardziej ogólny wykaz tychże zmiennych dostępny jest w manualu PHP pod adresem http://pl2.php.net/manual/en/reserved.variables.php.
Autor: Tomasz "Zyx" Jędrzejewski, www.zyxist.com
Źródło: http://webcity.pl/webcity/zmienne_srodowiskowe_w_php