Zmienne środowiskowe w PHP

Autor: Tomasz Jędrzejewski
Data publikacji: 07.07.2002, 21:20 | Ostatnia modyfikacja: 14.09.2006, 12:47

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/>';
}
?>

Do góry

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

Do góry

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.

Do góry

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.

Do góry

Inne informacje

Rozmaitych zmiennych jest bardzo dużo. Tu opiszÄ™ te, które nie pasujÄ… do poprzednich dziaÅ‚ów.

Do góry

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.

Do góry

Waszym zdaniem:

Nikt jeszcze nie dodał swojego komentarza. Możesz być pierwszy!


Twoim zdaniem:

Reklama

banner

Partnerzy

CityDesign.pl
phpSolutions