Superglobální pole $_SERVER PHP ($HTTP_SERVER_VARS). $_SERVER - Informace o serveru a runtime prostředí Pomocí prvků pole $_SERVER
Element $_SERVER["DOCUMENT_ROOT"] obsahuje cestu ke kořenovému adresáři serveru; pokud je skript spuštěn na virtuálním hostiteli, tento prvek určuje cestu ke kořenovému adresáři virtuálního hostitele. Tito. v konfiguračním souboru httpd.conf má virtuální hostitel direktivu DocumentRoot nastavenou na "D:/main", element $_SERVER["DOCUMENT_ROOT"] bude obsahovat hodnotu "D:main".
$_SERVER["HTTP_ACCEPT"] prvek
Element $_SERVER["HTTP_ACCEPT"] popisuje preference klienta ohledně typu dokumentu. Obsah tohoto prvku je načten z hlavičky Accept HTTP odeslané z klienta na server. Obsah této hlavičky může vypadat takto
Obrázek/gif, obrázek/x-xbitmap, obrázek/jpeg, obrázek/pjpeg, aplikace/x-shockwave-flash, aplikace/vnd.ms-excel, aplikace/msword, */*
Záhlaví Accept vám umožňuje zadat typ média, který klient preferuje přijímat v reakci na svůj požadavek. Tato hlavička vám umožňuje sdělit serveru, že odpověď je omezena na malou sadu preferovaných typů.
Symbol * se používá k seskupení typů v řadě médií. Například symbol */* určuje použití všech typů a typ zápisu/* určuje použití všech podtypů vybraného typu typu.
Komentář
Typy médií jsou od sebe odděleny čárkami.
Každý řádek médií je také charakterizován další sadou parametrů. Jedním z nich je tzv. koeficient relativní preference q, který nabývá hodnot od 0 do 1, respektive od méně preferovaných typů k preferovanějším. Použití více parametrů q umožňuje klientovi sdělit serveru relativní stupeň preference pro daný typ média.
Komentář
Parametr q má výchozí hodnotu 1. Od typu média je také oddělen středníkem.
Přijmout příklad záhlaví:
Přijmout: audio/*; q=0,2, audio/základní
V této hlavičce je prvním typem audio/*, který zahrnuje všechny hudební dokumenty a vyznačuje se preferenčním koeficientem 0,2. Je zadán čárkami oddělený zvuk/základní typ, pro který není preferenční koeficient specifikován a předpokládá se výchozí hodnota jedna. Citování tohoto nadpisu lze interpretovat následovně: „Dávám přednost zvukovému/základnímu typu, ale mohu poslat i dokumenty jakéhokoli jiného typu zvuku, pokud je k dispozici, po snížení preferenčního koeficientu o více než 80 %.
Příklad by mohl být složitější.
Přijmout: text/prostý; q=0,5, text/html,
text/x-dvi; q=0,8, text/x-c
Komentář
Všimněte si, že prvek $_SERVER["HTTP_ACCEPT"] obsahuje přesně stejné informace, ale bez úvodní hlavičky Accept.
Tato hlavička je interpretována následovně: Preferovány jsou typy dokumentů text/html a text/x-c, ale pokud nejsou dostupné, pak klient, který tento požadavek požaduje, upřednostní text/x-dvi, a pokud ne, může přijmout typ text/prostý.
$_SERVER["HTTP_ACCEPT_LANGUAGE"] prvek
Element $_SERVER["HTTP_ACCEPT_LANGUAGE"] popisuje jazykové preference klienta. Tyto informace se získávají z hlavičky HTTP Accept-Language odeslané klientem na server. Lze uvést následující příklad:
Přijímací jazyk: ru, en; q = 0,7
Což lze interpretovat následovně: klient preferuje ruský jazyk, ale pokud není k dispozici, souhlasí s akceptováním dokumentů v angličtině. Element $_SERVER["HTTP_ACCEPT_LANGUAGE"] bude obsahovat přesně stejné informace, ale bez hlavičky Accept-Language:
Ru, en; q = 0,7
Obsah elementu $_SERVER["HTTP_ACCEPT_LANGUAGE"] lze použít k určení národnosti návštěvníků. Výsledky však budou přibližné, protože mnoho uživatelů používá anglické prohlížeče, které serveru upozorní, že návštěvník preferuje pouze jeden jazyk – angličtinu.
$_SERVER["HTTP_HOST"] prvek
Element $_SERVER["HTTP_HOST"] obsahuje název serveru, který je obvykle stejný jako název domény webu hostovaného na serveru. Název zadaný v tomto parametru je obvykle stejný jako $_SERVER["SERVER_NAME"]. Parametr obsahuje pouze název domény bez názvu protokolu (http://), tzn.
www.sofftime.ru
$_SERVER["HTTP_REFERER"] prvek
Element $_SERVER["HTTP_REFERER"] obsahuje adresu stránky, ze které návštěvník na tuto stránku přišel. Přechod musí být přes odkaz. Vytvoříme dvě stránky index.php a page.php.
stránka index.php
echo "Odkaz na stránku PHP
"
;
$_SERVER["HTTP_REFERER"]
?>
Stránka page.php bude mít podobný obsah, ale odkaz bude směřovat na stránku index.php.
Stránka stránky.php
echo "Odkaz na stránku PHP
"
;
echo "Obsah $_SERVER [ "HTTP_REFERER"] - " .
$_SERVER["HTTP_REFERER"]
?>
Při přechodu z jedné stránky na druhou se pod odkazem zobrazí adresa stránky, ze které byl přechod proveden.
$_SERVER["HTTP_USER_AGENT"] prvek
Prvek $_SERVER["HTTP_USER_AGENT"] obsahuje informace o typu a verzi prohlížeče a operačního systému návštěvníka.
Zde je typický obsah tohoto řádku: "Mozilla/4.0 (kompatibilní; MSIE 6.0; Windows NT 5.1)". Přítomnost podřetězce "MSIE 6.0" znamená, že návštěvník si stránku prohlíží pomocí Internet Exploreru verze 6.0. Řetězec "Windows NT 5.1" označuje operační systém Windows XP.
Komentář
Pro Windows 2000 vypadá prvek $_SERVER["HTTP_USER_AGENT"] takto: "Mozilla/4.0 (kompatibilní; MSIE 5.01; Windows NT 5.0)")", zatímco pro Windows XP vypadá jako "Mozilla/4.0 (kompatibilní; MSIE 6.0); Windows NT 5.1)".
Pokud návštěvník používá prohlížeč Opera, obsah $_SERVER["HTTP_USER_AGENT"] může vypadat takto: "Mozilla/4.0 (kompatibilní; MSIE 5.0; Windows 98) Opera 6.04 ". Je zde také přítomen podřetězec "MSIE 6.0", což znamená, že prohlížeč Opera je kompatibilní s prohlížečem Internet Explorer a používá stejné Windows DLL. Proto při analýze řetězce vráceného prohlížečem mějte na paměti, že Internet Explorer odkazuje na řetězec obsahující podřetězec "MSIE 6.0" a neobsahující podřetězec "Opera". Navíc z tohoto řádku můžeme usoudit, že uživatel používá operační systém Windows 98.
Komentář
Uživatelský agent prohlížeče Firefox může vypadat takto Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5.
Při použití prohlížeče Netscape může obsah prvku $_SERVER["HTTP_USER_AGENT"] vypadat takto: "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1" . Tento prohlížeč lze identifikovat podle přítomnosti podřetězce "Netscape". Kromě toho můžete zjistit, že návštěvník přistupuje k internetu pomocí operačního systému Linux s jádrem optimalizovaným pro Pentium IV v grafickém uživatelském rozhraní X-Window. Tento mechanismus je užitečný pro sběr statistických informací, které návrhářům umožňují optimalizovat stránky pro nejběžnější prohlížeče.
Prvek $_SERVER["REMOTE_ADDR"]
Element $_SERVER["REMOTE_ADDR"] obsahuje IP adresu klienta. Při testování na místním počítači bude tato adresa 127.0.0.1. Při testování v síti však proměnná vrátí IP adresu klienta nebo posledního proxy serveru, přes který se klient na server dostal. Pokud klient používá proxy server, jeho IP adresu zjistíte pomocí proměnné prostředí HTTP_X_FORWARDED_FOR, jejíž hodnotu lze získat pomocí funkce getenv().
Komentář
Proxy servery jsou speciální zprostředkující servery, které poskytují speciální typ služby: kompresi provozu, kódování dat, přizpůsobení mobilním zařízením atd. Mezi mnoha proxy servery existují takzvané anonymní proxy servery, které umožňují skrýt skutečnou IP adresu klienta, tyto servery nevracejí proměnnou prostředí HTTP_X_FORWARDED_FOR.
Načítání proměnné prostředí HTTP_X_FORWARDED_FOR
echo getenv(HTTP_X_FORWARDED_FOR );
?>
$_SERVER["SCRIPT_FILENAME"] prvek
Element $_SERVER["SCRIPT_FILENAME"] obsahuje absolutní cestu k souboru z kořenového adresáře jednotky. Pokud tedy server běží pod operačním systémem Windows, pak taková cesta může vypadat takto: "d:main estindex.php", tzn. cesta se zadává z disku, v operačním systému typu UNIX je cesta zadána z kořenového adresáře /, například "/var/share/www/test/index.php".
$_SERVER["SERVER_NAME"] prvek
Element $_SERVER["SERVER_NAME"] obsahuje název serveru, který se obvykle shoduje s názvem domény webu, který je na něm hostován. Například,
Www.site
Obsah prvku $_SERVER["SERVER_NAME"] je často stejný jako obsah prvku $_SERVER["HTTP_HOST"]. Kromě názvu serveru vám superglobální pole $_SERVER umožňuje zjistit řadu parametrů serveru, jako je IP adresa serveru, naslouchací port, nainstalovaný webový server a verze protokolu HTTP. Tyto informace jsou umístěny v prvcích $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] a $_SERVER["SERVER_PROTOCOL"]. Níže je uveden příklad použití těchto prvků.
Použití prvků pole $_SERVER
echo "Název serveru -". $_SERVER["SERVER_NAME"]. "
"
;
echo "IP adresa serveru -". $_SERVER["SERVER_ADDR"]. "
"
;
echo "Port serveru -". $_SERVER["SERVER_PORT"]. "
"
;
echo "Webový server -". $_SERVER["SERVER_SOFTWARE"]. "
"
;
echo "Verze protokolu HTTP -". $_SERVER["SERVER_PROTOCOL"]. "
"
;
?>
$HTTP_SERVER_VARS [odstraněno]
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
$_SERVER -- $HTTP_SERVER_VARS [odstraněno] — Informace o serveru a runtime
Popis
Proměnná $_SERVER je pole obsahující informace, jako jsou záhlaví skriptů, cesty a umístění. Položky v tomto poli jsou vytvářeny webovým serverem. Neexistuje žádná záruka, že každý webový server bude poskytovat některou z těchto možností; server může některé z nich vynechat nebo poskytnout jiné, které zde nejsou uvedeny. Mnoho z těchto proměnných je však přítomno ve specifikaci » CGI/1.1, takže můžete očekávat, že budou implementovány také na konkrétním webovém serveru.
Proměnná $HTTP_SERVER_VARS obsahuje stejnou počáteční informaci, ale není superglobální. (Všimněte si, že $HTTP_SERVER_VARS a $_SERVER jsou různé proměnné, takže PHP s nimi nakládá odpovídajícím způsobem.) Všimněte si také, že „dlouhá pole“ byla v PHP 5.4.0 odstraněna, takže $HTTP_SERVER_VARS již neexistuje.
Indexy
V poli $_SERVER můžete nebo nemusíte najít některý z následujících prvků. Všimněte si, že pokud je PHP spuštěno na příkazovém řádku, bude dostupných jen málo položek, pokud vůbec nějaké.
"PHP_SELF" Název souboru aktuálně prováděného skriptu vzhledem ke kořenovému adresáři dokumentu. Například $_SERVER["PHP_SELF"] ve skriptu na http://example.com/foo/bar.php bude /foo/bar.php . Konstanta __FILE__ obsahuje úplnou cestu a název souboru aktuálního (tj. zahrnutého) souboru. Pokud je PHP spuštěno na příkazovém řádku, tato proměnná obsahuje název skriptu od PHP 4.3.0. Dříve byla nedostupná."argv" Pole argumentů předávaných skriptu. Když je skript spuštěn na příkazovém řádku, poskytuje C-jako přístup k možnostem příkazového řádku. Při volání pomocí metody GET bude toto pole obsahovat řetězec dotazu."argc" Obsahuje počet parametrů předávaných skriptu (pokud je spuštěn na příkazovém řádku)."GATEWAY_INTERFACE" Obsahuje verzi specifikace CGI používanou serverem; například" CGI/1.1". "SERVER_ADDR" IP adresa serveru, na kterém běží aktuální skript.„SERVER_NAME“ Název hostitele, na kterém běží aktuální skript. Pokud je skript spuštěn na virtuálním hostiteli, bude obsahovat název definovaný pro tohoto virtuálního hostitele."SERVER_SOFTWARE" Identifikační řetězec serveru zadaný v hlavičkách při zodpovězení požadavku."SERVER_PROTOCOL" Název a verze informačního protokolu, jehož prostřednictvím byla stránka vyžádána; například " HTTP/1.0"; " REQUEST_METHOD " Jaká metoda byla použita k vyžádání stránky; například " DOSTAT", "HLAVA", "POŠTA", "DÁT".
" REQUEST_TIME " Časové razítko začátku požadavku. K dispozici od PHP 5.1.0." REQUEST_TIME_FLOAT " Časové razítko začátku požadavku s přesností na mikrosekundy. K dispozici od PHP 5.4.0." ŘETĚZEC DOTAZU " Řetězec dotazu, pokud existuje, se kterým byla stránka načtena."DOCUMENT_ROOT" Kořenový adresář dokumentu, kde se spouští aktuální skript, je přesně ten, který je zadán v konfiguračním souboru serveru."HTTP_ACCEPT" Obsah záhlaví akceptovat: z aktuální žádosti, pokud existuje."HTTP_ACCEPT_CHARSET" Obsah záhlaví AcceptCharset: z aktuální žádosti, pokud existuje. Například: " iso-8859-1,*,utf-8". "HTTP_ACCEPT_ENCODING" Obsah záhlaví Přijmout kódování: gzip". "HTTP_ACCEPT_LANGUAGE" Obsah záhlaví Přijímací jazyk: z aktuální žádosti, pokud existuje. Například: " en". "HTTP_CONNECTION" Obsah záhlaví spojení: z aktuální žádosti, pokud existuje. Například: " Udržet naživu". "HTTP_HOST" Obsah záhlaví hostitel: z aktuální žádosti, pokud existuje."HTTP_REFERER" Adresa stránky (pokud existuje), která přivedla prohlížeč uživatele na tuto stránku. Tato hlavička je nastavena webovým prohlížečem uživatele. Ne všechny prohlížeče jej instalují a některé umožňují změnu obsahu hlavičky HTTP_REFERER jako další funkci. Jedním slovem, opravdu se mu nedá věřit."HTTP_USER_AGENT" Obsah záhlaví Uživatelský agent: z aktuální žádosti, pokud existuje. Tento řetězec obsahuje označení prohlížeče, kterým si uživatel tuto stránku vyžádal. Typickým příkladem je řádek: Mozilla/4.5 (X11; U; Linux 2.2.9 i586). Tuto hodnotu můžete mimo jiné použít s funkcí get_browser() k přizpůsobení výstupu vaší stránky možnostem prohlížeče uživatele"https" Má neprázdnou hodnotu, pokud byl požadavek podán prostřednictvím protokolu HTTPS.Komentář:
PHP skript se ukončí po odeslání hlaviček (tedy poté, co provede jakýkoli výstup bez výstupního bufferování), pokud byl požadavek proveden metodou HLAVA.
"REMOTE_ADDR" IP adresa, ze které si uživatel prohlíží aktuální stránku."REMOTE_HOST" Vzdálený hostitel, ze kterého si uživatel prohlíží aktuální stránku. Zpětné vyhledávání DNS je založeno na hodnotě proměnné REMOTE_ADDR.Komentář: Všimněte si, že při použití ISAPI s IIS bude hodnota vypnuto pokud požadavek nebyl podán prostřednictvím protokolu HTTPS.
"REMOTE_PORT" Port na vzdáleném počítači, který se používá ke komunikaci s webovým serverem."REMOTE_USER" Ověřený uživatel."REDIRECT_REMOTE_USER" Ověřený uživatel, pokud byl požadavek interně přesměrován."SCRIPT_FILENAME"Komentář: Váš webový server musí být nakonfigurován k vytvoření této proměnné. Například v Apache potřebujete přítomnost směrnice Vyhledávání názvu hostitele zapnuto v souboru httpd.conf pro vytvoření této proměnné. viz také gethostbyaddr().
Absolutní cesta ke skriptu, který se právě provádí.
"SERVER_ADMIN" Tato proměnná získává svou hodnotu (pro Apache) z direktivy v konfiguračním souboru serveru. Pokud je skript spuštěn na virtuálním hostiteli, bude to hodnota definovaná pro tohoto virtuálního hostitele."PORT SERVERU" Port na počítači serveru, který webový server používá k připojení. Pro výchozí nastavení bude hodnota " 80 "; například při použití SLL bude tato hodnota nakonfigurována pro zabezpečená připojení HTTP.Komentář:
Pokud je skript spuštěn na příkazovém řádku (CLI) pomocí relativní cesty, jako je file.php nebo ../file.php , proměnná $_SERVER["SCRIPT_FILENAME"] bude obsahovat relativní cestu zadanou uživatelem.
"SERVER_SIGNATURE" Řetězec obsahující verzi serveru a název virtuálního hostitele, který má být přidán na stránky generované serverem, je-li povoleno."PATH_TRANSLATED" Cesta k aktuálnímu skriptu založená na souborovém systému (nikoli na kořenovém adresáři dokumentu) poté, co server provedl jakékoli mapování z virtuálního na skutečný.Komentář: Chcete-li získat fyzický (skutečný) port v Apache 2, musíte nainstalovat UseCanonicalName = Zapnuto a UseCanonicalPhysicalPort = Zapnuto, jinak může být tato hodnota podvržena a nevrátí skutečnou hodnotu fyzického portu. Spoléhat se na tuto hodnotu není bezpečné v kontextu aplikací, které vyžadují zvýšené zabezpečení.
„SCRIPT_NAME“ Obsahuje cestu k aktuálně prováděnému skriptu. To je užitečné pro stránky, které potřebují ukazovat samy na sebe. Konstanta __FILE__ obsahuje úplnou cestu a název aktuálního (tj. zahrnutého) souboru." REQUEST_URI " Identifikátor URI, který byl předán za účelem přístupu na tuto stránku. Například, " /index.html". "PHP_AUTH_DIGEST" Při provádění autentizace HTTP Digest je tato proměnná nastavena na hlavičku "Authorization" zaslanou klientem (kterou je pak nutné použít pro příslušnou validaci)."PHP_AUTH_USER" Při ověřování HTTP je tato proměnná nastavena na uživatelské jméno poskytnuté uživatelem."PHP_AUTH_PW" Při provádění ověřování HTTP je tato proměnná nastavena na heslo poskytnuté uživatelem.„AUTH_TYPE“ Při provádění ověřování HTTP je tato proměnná nastavena na typ ověřování, který se používá."PATH_INFO" Obsahuje jakoukoli cestu zadanou uživatelem za názvem skriptu, ale před řetězcem dotazu, je-li k dispozici. Pokud je například aktuální skript požadován na adrese URL http://www.example.com/php/path_info.php/some/stuff?foo=bar , pak proměnná $_SERVER["PATH_INFO"] bude obsahovat /nějaké věci?>Komentář: Od PHP 4.3.2 již proměnná PATH_TRANSLATED není implicitně nastavena v Apache 2 SAPI, ve srovnání s Apache verze 1, kde je nastavena na stejnou hodnotu jako SCRIPT_FILENAME, když ji Apache nepoužívá. Tato změna byla provedena v souladu se specifikací CGI, kde by proměnná PATH_TRANSLATED měla existovat pouze tehdy, když je definována PATH_INFO. Uživatelé Apache 2 mohou direktivu použít AcceptPathInfo = Zapnuto v konfiguračním souboru httpd.conf nastavte proměnnou PATH_INFO.
Výsledek spuštění tohoto příkladu bude něco takového.
Ti, kteří více či méně vážně studovali PHP vězte, že existuje jedno velmi užitečné globální pole PHP, který se nazývá $_SERVER. A v tomto článku bych rád analyzoval nejoblíbenější klíče a jejich hodnoty v tomto poli, protože jejich znalost je prostě nezbytná i pro začátečníka PHP programátor.
Než přistoupíte k do globálního pole $_SERVER v PHP Jen ti dám malou nápovědu. Je tam zabudována úžasná funkce PHP, který se nazývá phpinfo(). Uveďme si hned příklad jeho použití:
phpinfo();
?>
V důsledku spuštění tohoto jednoduchého skriptu uvidíte obrovskou tabulku s různými Nastavení PHP interpretu, včetně, na konci bude tabulka hodnot globální pole $_SERVER. Zobrazí seznam všech klíčů a všech jejich odpovídajících hodnot. Jak vám to může pomoci? A skutečnost, že pokud potřebujete tu či onu hodnotu, a zapomenete, jak se klíč nazývá, pak pomocí funkce phpinfo() Jeho název si můžete vždy zapamatovat. Obecně platí, že spustíte tento skript a okamžitě mi porozumíte.
Nyní přejděme k těm nejoblíbenějším Klíče pole $_SERVER:
- HTTP_USER_AGENT- tento klíč umožňuje zjistit vlastnosti klienta. Ve většině případů je to určitě prohlížeč, ale ne vždy. A opět, když prohlížeč, tak který, to se dozvíte v této proměnné.
- HTTP_REFERER- obsahuje absolutní cestu k tomuto souboru ( PHP skript, HTML stránku), ze kterého jste přešli na tento skript. Zhruba řečeno, odkud se klient vzal.
- SERVER_ADDR - IP adresa server.
- REMOTE_ADDR - IP adresa klienta.
- DOCUMENT_ROOT- fyzická cesta ke kořenovému adresáři webu. Tato možnost se nastavuje přes Konfigurační soubor serveru Apache.
- SCRIPT_FILENAME- fyzická cesta k volanému skriptu.
- ŘETĚZEC DOTAZU- velmi užitečná hodnota, která vám umožní získat řetězec s dotazem a poté tento řetězec analyzovat.
- REQUEST_URI- ještě užitečnější hodnota, která obsahuje nejen samotný požadavek, ale i relativní cestu k volanému skriptu z kořene. To se velmi často používá k odstranění duplicit z index.php, tedy když máme takové URL: "http://mysite.ru/index.php" a " http://mysite.ru/“ vést na jednu stránku a URL jiná tedy duplicita, která bude mít špatný vliv na optimalizaci pro vyhledávače. A tady s pomocí REQUEST_URI můžeme definovat: index.php nebo se scénář nevolal. A můžeme přesměrovat pomocí index.php(pokud byl přítomen REQUEST_URI) na bez index.php. V důsledku toho při odesílání takové žádosti: " http://mysite.ru/index.php?id=5“, budeme mít přesměrování na URL: "http://mysite.ru/?id=5 To znamená, že jsme se zbavili duplikace odstraněním z URL tento index.php.
- SCRIPT_NAME- relativní cesta k volanému skriptu.
Možná jsou to všechno prvky $_SERVER globální pole v PHP které se pravidelně používají. Potřebují vědět a umět je použít, když je to nutné.
Pro začátek vylepšíme registrační stránku přidáním možnosti nahrát avatara. Zdrojový obrázek musí být ve formátu jpg, gif nebo png. Také by nemělo být větší než 2 MB. Nebojte se, po komprimaci skriptem bude velikost avatara cca 3 kb a formát jpg. Otevřít stránku reg.php a přidejte značku < formulář> čára enctype="multipart/form data", jako v příkladu: