JustPaste.it

Zmienne środowiskowe w PHP

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 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.

<?php
if(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