Windows.  Vírusy.  Prenosné počítače.  internet.  Kancelária.  Verejné služby.  Vodiči

$HTTP_SERVER_VARS [odstránené]

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

$_SERVER -- $HTTP_SERVER_VARS [odstránené]Informácie o serveri a prostredí spustenia

Popis

Premenná $_SERVER je pole obsahujúce informácie, ako sú hlavičky skriptov, cesty a umiestnenia. Položky v tomto poli vytvára webový server. Neexistuje žiadna záruka, že každý webový server poskytne niektorú z nich; server môže niektoré z nich vynechať alebo poskytnúť iné, ktoré tu nie sú uvedené. Mnohé z týchto premenných sú však prítomné v špecifikácii » CGI/1.1, takže môžete očakávať, že budú implementované na vašom konkrétnom webovom serveri.

Premenná $HTTP_SERVER_VARS obsahuje rovnaké počiatočné informácie, ale nie je superglobálna. (Všimnite si, že $HTTP_SERVER_VARS a $_SERVER sú rôzne premenné, takže PHP s nimi zaobchádza podľa toho). Všimnite si tiež, že „dlhé polia“ boli odstránené

PHP verzie

5.4.0, takže $HTTP_SERVER_VARS už neexistuje.

Indexy V poli $_SERVER môžete alebo nemusíte nájsť ktorýkoľvek z nasledujúcich prvkov. Všimnite si, že ak je PHP spustené na príkazovom riadku, bude dostupných len málo položiek, ak vôbec nejaké. "PHP_SELF" Názov súboru skriptu, ktorý je momentálne spustený, vzhľadom na koreň dokumentu. Napríklad $_SERVER["PHP_SELF"] v skripte na http://example.com/foo/bar.php bude /foo/bar.php . Konštanta __FILE__ obsahuje plná cesta a názov súboru aktuálneho (t. j. pripojeného) súboru. Ak je spustené PHP príkazový riadok , táto premenná obsahuje názov skriptu od PHP 4.3.0. Predtým bola nedostupná."argv" Do skriptu bolo odovzdaných množstvo argumentov. Keď je skript spustený na príkazovom riadku, poskytuje prístup k možnostiam príkazového riadka ako v jazyku C. Pri volaní cez GET metóda, toto pole bude obsahovať reťazec dotazu. "argc" Obsahuje počet parametrov odovzdaných skriptu (ak je spustený na príkazovom riadku).". "GATEWAY_INTERFACE" IP adresa servera, na ktorom beží aktuálny skript.„SERVER_NAME“ Názov hostiteľa, na ktorom beží aktuálny skript. Ak je skript spustený na virtuálnom hostiteľovi, bude obsahovať názov, ktorý je preň definovaný. virtuálny hostiteľ "SERVER_SOFTWARE" Identifikačný reťazec servera špecifikovaný v hlavičkách pri odozve na požiadavku. "SERVER_PROTOCOL" Názov a verzia informačného protokolu, prostredníctvom ktorého bola stránka vyžiadaná; napríklad ""; HTTP/1.0 "REQUEST_METHOD" Aká metóda bola použitá na vyžiadanie stránky; napríklad "", "GET", "HLAVA", "POST".

PUT:

Komentujte GET.

PHP skript sa ukončí po odoslaní hlavičiek (to znamená po vykonaní akéhokoľvek výstupu bez ukladania výstupu do vyrovnávacej pamäte), ak bola požiadavka vykonaná pomocou metódy „REQUEST_TIME“Časová pečiatka začiatku požiadavky. Dostupné od PHP 5.1.0. „REQUEST_TIME_FLOAT“Časová pečiatka začiatku požiadavky s presnosťou na mikrosekundy. Dostupné od PHP 5.4.0.„QUERY_STRING“ Reťazec dopytu, ak existuje, ktorý načítal stránku. "DOCUMENT_ROOT" Koreňový adresár dokumentu, v ktorom sa spúšťa aktuálny skript, je presne ten, v ktorom je špecifikovaný konfiguračný súbor server. "HTTP_ACCEPT" Obsah hlavičky Prijať: server. z aktuálnej žiadosti, ak existuje." HTTP_ACCEPT_CHARSET " Accept-Charset:". z aktuálnej žiadosti, ak existuje. Napríklad: " server. iso-8859-1,*,utf-8 " HTTP_ACCEPT_ENCODING "". Accept-Encoding: server. gzip" HTTP_ACCEPT_LANGUAGE " Prijímací jazyk:". z aktuálnej žiadosti, ak existuje. Napríklad: " server. en" HTTP_ACCEPT_LANGUAGE " "HTTP_CONNECTION"". Pripojenie: server. Keep-Alive"HTTP_HOST" Hostiteľ: z aktuálnej žiadosti, ak existuje."HTTP_REFERER" server. Adresa stránky (ak existuje), ktorá priviedla prehliadač používateľa na túto stránku. Túto hlavičku nastavuje webový prehliadač používateľa. Nie všetky prehliadače ho inštalujú a niektoré vám umožňujú zmeniť obsah hlavičky HTTP_REFERER ako ďalšiu funkciu. Jedným slovom sa mu naozaj nedá veriť." HTTP_USER_AGENT " User-Agent: z aktuálnej žiadosti, ak existuje. Tento riadok obsahuje prehliadač, ktorý používateľ použil na vyžiadanie túto stránku. Typickým príkladom je riadok: Mozilla/4.5 (X11; U; Linux 2.2.9 i586) . Okrem iného môžete túto hodnotu použiť s funkciou

PUT: get_browser() prispôsobiť výstup vašej stránky možnostiam prehliadača používateľa, ak požiadavka nebola uskutočnená cez HTTPS.

"REMOTE_ADDR" IP adresa, z ktorej používateľ prehliada aktuálna stránka. "REMOTE_HOST" Vzdialený hostiteľ, z ktorého si používateľ prezerá aktuálnu stránku. Reverzné vyhľadávanie DNS je založené na hodnote premennej REMOTE_ADDR.

PUT: Váš webový server musí byť nakonfigurovaný na vytvorenie tejto premennej. Napríklad v Apache potrebujete prítomnosť smernice Vyhľadávanie názvu hostiteľa je zapnuté v súbore httpd.conf, aby bola vytvorená táto premenná. Pozri tiež.

gethostbyaddr() "REMOTE_PORT" Port na vzdialenom počítači, ktorý sa používa na komunikáciu s webovým serverom. "REMOTE_USER" Overený používateľ. „REDIRECT_REMOTE_USER“ Overený používateľ, ak bola požiadavka interne presmerovaná.

"SCRIPT_FILENAME" Absolútna cesta k skriptu, ktorý je v momentálne

PUT:

sa vykonáva.

Ak je skript spustený na príkazovom riadku (CLI) pomocou relatívnej cesty, ako je súbor.php alebo ../súbor.php, premenná $_SERVER["SCRIPT_FILENAME"] bude obsahovať relatívnu cestu zadanú používateľom. "SERVER_ADMIN" Táto premenná získava svoju hodnotu (pre Apache) z direktívy v konfiguračnom súbore servera. Ak je skript spustený na virtuálnom hostiteľovi, bude to hodnota definovaná pre tohto virtuálneho hostiteľa. "SERVER_PORT" 80 Port na serverovom počítači, ktorý webový server používa na pripojenie.

PUT: Pre predvolené nastavenia bude hodnota " "; napríklad pri použití protokolu SLL bude táto hodnota nastavená na zabezpečené pripojenia HTTP. Ak chcete získať fyzický (skutočný) port v Apache 2, musíte ho nainštalovať UseCanonicalName = On A

UseCanonicalPhysicalPort = On , inak môže byť táto hodnota nahradená a nevráti skutočnú hodnotu fyzického portu. Spoliehanie sa na túto hodnotu nie je bezpečné v kontexte aplikácií, ktoré vyžadujú zvýšené zabezpečenie. "SERVER_SIGNATURE"

PUT: Od PHP 4.3.2 už premenná PATH_TRANSLATED nie je implicitne nastavená v Apache 2 SAPI, v porovnaní s Apache verziou 1, kde bola nastavená na rovnakú hodnotu ako premenná SCRIPT_FILENAME, keď ju Apache nepoužíva. Táto zmena bola vykonaná v súlade so špecifikáciou CGI, kde premenná PATH_TRANSLATED by mala existovať len vtedy, keď je definovaná PATH_INFO. Používatelia Apache 2 môžu použiť smernicu AcceptPathInfo = Zapnuté

v konfiguračnom súbore httpd.conf na nastavenie premennej PATH_INFO. „SCRIPT_NAME“ Obsahuje cestu k aktuálne vykonávanému skriptu. Je to užitočné pre stránky, ktoré musia ukazovať na seba. Konštanta __FILE__ obsahuje úplnú cestu a názov aktuálneho (t. j. zahrnutého) súboru. "REQUEST_URI"". Identifikátor URI, ktorý bol odovzdaný na prístup k tejto stránke. Napríklad:/index.html "PHP_AUTH_DIGEST" Pri vykonávaní autentifikácie HTTP Digest je tejto premennej priradená hlavička „Autorizácia“, ktorú odosiela klient (táto sa potom musí použiť na príslušnú validáciu). "PHP_AUTH_USER" Keď sa vykoná HTTP autentifikácia, táto premenná sa nastaví na používateľské meno poskytnuté používateľom. "PHP_AUTH_PW" Keď sa vykoná overenie HTTP, táto premenná sa nastaví na heslo poskytnuté používateľom. „AUTH_TYPE“ Keď sa vykoná HTTP autentifikácia, táto premenná sa nastaví na typ autentifikácie, ktorá sa používa.?>

"PATH_INFO"

Obsahuje akúkoľvek cestu zadanú používateľom, ktorá sa nachádza za názvom skriptu, ale pred reťazcom dotazu, ak je k dispozícii.

Ak sa napríklad aktuálny skript požaduje z adresy URL http://www.example.com/php/path_info.php/some/stuff?foo=bar , potom premenná $_SERVER["PATH_INFO"] bude obsahovať

/nejaké/veci

Výsledkom spustenia tohto príkladu bude niečo také.

Správna etiketa je pomenovať súbory, ktoré popisujú triedu, rovnakým názvom ako trieda samotná. To uľahčuje určenie účelu každého súboru v priečinku tried.

Je tiež bežné pridať .class alebo .inc na koniec názvu súboru triedy. Týmto spôsobom jasne definujeme účel súboru a môžeme použiť .htaccess na obmedzenie prístupu k týmto súborom.

Trieda používateľa (User.class.php)

Táto trieda bude definovať každého používateľa. S rastom túto aplikáciu Definícia „používateľa“ sa môže výrazne zmeniť. Našťastie OOP programovanie uľahčuje pridávanie ďalších užívateľských atribútov.

Konštruktér

V tejto triede použijeme konštruktor – ide o funkciu, ktorá sa automaticky volá pri vytváraní ďalšej kópie triedy. To nám umožňuje automaticky publikovať niektoré atribúty po vytvorení projektu. V tejto triede bude konštruktor preberať jeden argument: asociatívne pole, ktoré obsahuje jeden riadok z tabuľky užívateľov našej databázy.

require_once "DB.class.php"; class User ( public $id; public $username; public $hashedPassword; verejný $email;
public $joinDate;
//Konštruktor sa volá pri vytvorení nového objektu//Vezme asociatívne pole s riadkom DB ako argument. function __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" username"])) ? $data["username"] : ""; $this->hashedPassword = (isset($data["heslo"])) ? $data["password"] : ""; $this- >email = (isset($data["email"])) ? $data["email"] : ""; $this->joinDate = (isset($data["join_date"])) $data[" join_date "] : "" ;)
public function save($isNewUser = false) ( //vytvorte nový databázový objekt. $db = new DB(); //ak je používateľ už zaregistrovaný a my //práve aktualizujeme jeho informácie. if(!$isNewUser ) ( //nastavenie dátového poľa $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"email" => ""$this->email"");
//aktualizácia riadku v databáze $db->update($data, "users", "id = ".$this->id); )else ( //ak je používateľ registrovaný prvýkrát. $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"" , "e-mail" => ""$this->email"", "join_date" => """.dátum("R-m-d H:i:s",čas()).""" id = $db ->insert($data, "users" $this->joinDate = time(); ) ) ?>

Vysvetlenie

Prvá časť kódu, mimo zóny triedy, zabezpečuje, že trieda je pripojená k databáze (keďže trieda User má funkciu, ktorá túto triedu vyžaduje).

Namiesto premenných triedy „chránené“ (používané v 1. lekcii) ich definujeme ako „verejné“. To znamená, že akýkoľvek kód mimo triedy má pri práci s objektom User prístup k týmto premenným.

Konštruktor vezme pole, v ktorom sú stĺpce v tabuľke kľúčmi. Premennú triedy definujeme pomocou $this->variablename. V príklade tejto triedy najskôr skontrolujeme, či hodnota určitého kľúča existuje. Ak áno, nastavíme premennú triedy na túto hodnotu. V opačnom prípade prázdny reťazec. Kód používa krátku formu zápisu, ak:

$hodnota = (3 == 4) ? "A" : "B";

V tomto príklade kontrolujeme, či sa 3 rovná štyrom! Ak áno - potom $value = “A”, nie - $value = “B”. V našom príklade je výsledkom $value = „B“.

Informácie o Používateľoch ukladáme do databázy

Funkcia uloženia sa používa na vykonanie zmien v databázovej tabuľke s aktuálnymi hodnotami v objekte používateľa. Táto funkcia používa triedu DB, ktorú sme vytvorili v prvej lekcii. Pomocou premenných triedy sa nastaví pole $data. Ak sa údaje používateľa ukladajú prvýkrát, $isNewUser sa odovzdá ako $true (predvolene nepravda). Ak $isNewUser = $true, potom sa zavolá funkcia insert() triedy DB. V opačnom prípade sa zavolá funkcia update(). V oboch prípadoch budú informácie z objektu používateľa uložené v databáze.

Trieda UserTools.class.php

Táto trieda bude obsahovať funkcie, ktoré súvisia s používateľmi: login(), logout(), checkUsernameExists() a get(). S rozšírením tejto aplikácie však môžete pridať oveľa viac.

//UserTools.class.php require_once "User.class.php"; require_once "DB.class.php";
trieda UserTools(
//Prihlásiť používateľa. Najprv skontroluje, či sa //užívateľské meno a heslo zhodujú s riadkom v databáze. //Ak je to úspešné, nastavte premenné relácie //a uložte objekt používateľa.
verejné prihlásenie ($username, $password)
{
$hashedPassword = md5($heslo); $result = mysql_query("SELECT * FROM users WHERE username = "$username" AND password = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["user"] = serialize(new User(mysql_fetch_assoc($result))); $_SESSION["login_time"] = time(); $_SESSION["prihlásené_in "] = 1; return true; )else( return false; ) )
//Odhláste používateľa. Zničte premenné relácie. public function logout() ( unset($_SESSION["user"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Skontrolujte, či používateľské meno existuje. //Toto sa volá počas registrácie, aby sme sa uistili, že všetky používateľské mená sú jedinečné. verejná funkcia checkUsernameExists($username) ( $result = mysql_query("select id from users where username="$username""); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//získať používateľa //vráti objekt používateľa. Berie ID používateľa ako vstupnú verejnú funkciu get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result )))
?>

funkciu login().

Funkcia login() je jasná už podľa názvu. Berie používateľské argumenty $username a $password a kontroluje, či sa zhodujú. Ak sa všetko zhoduje, vytvorí objekt používateľa so všetkými informáciami a uloží ho do relácie. Upozorňujeme, že používame iba funkciu PHP serialize(). Vytvára uloženú verziu objektu, ktorú možno jednoducho zrušiť serializáciou pomocou unserialize(). Uloží sa aj čas prihlásenia. To môže byť neskôr použité na poskytovanie informácií používateľom o dĺžke pobytu na stránke.

Môžete si tiež všimnúť, že $_SESSION["logged_in"] sme nastavili na 1. To nám umožňuje na každej stránke jednoducho skontrolovať, či je používateľ prihlásený. Stačí zaškrtnúť iba túto premennú.

funkciu logout().

Tiež jednoduchá funkcia. Funkcia PHP unset() vymaže premenné v pamäti, zatiaľ čo session_destroy() vymaže reláciu.

funkcia checkUsernameExists().

Každý, kto vie po anglicky, funkciu ľahko pochopí. Jednoducho sa opýta databázy, či bolo použité podobné prihlásenie alebo nie.

funkcia get().

Táto funkcia prevezme jedinečné ID používateľa a vykoná dotaz do databázy pomocou triedy DB, konkrétne funkcie select(). Bude potrebné asociatívne pole s množstvom informácií o používateľovi a vytvorí nový objekt používateľa, pričom pole odovzdá konštruktorovi.

Kde to môžem použiť? Napríklad, ak vytvoríte stránku, ktorá potrebuje zobrazovať špecifické užívateľské profily, budete musieť tieto informácie dynamicky načítať. Môžete to urobiť takto: (povedzme, že adresa URL je http://www.website.com/profile.php?userID=3)

//poznámka: najprv budete musieť otvoriť pripojenie k databáze. //Ďalšie informácie o tom nájdete v časti 1. //Musíte sa tiež uistiť, že ste zahrnuli súbory triedy.
$tools = new UserTools(); $user = $tools->get($_REQUEST["userID"]); echo "Používateľské meno: ".$user->username.""; echo "Pripojené: ".$user->joinDate."";

Jednoducho! je to pravda?

Posledný dotyk na strane servera: global.inc.php

global.inc.php sa vyžaduje pre každú stránku na webe. prečo? Takto na stránku umiestnime všetky bežné operácie, ktoré budeme potrebovať. Napríklad spustíme session_start(). Otvorí sa aj pripojenie k databáze.

require_once "classes/UserTools.class.php";
require_once "classes/DB.class.php";
//pripojenie k databáze $db = new DB(); $db->connect();
//inicializácia objektu UserTools $userTools = new UserTools(); //spustenie relácie
session_start();
//obnoviť premenné relácie, ak ste prihlásení if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id) ) ?>

čo robí?

Deje sa tu viacero vecí. Najprv otvoríme pripojenie k databáze.

Po pripojení spustíme funkciu session_start(). Funkcia vytvorí reláciu alebo pokračuje v aktuálnej, ak je používateľ už prihlásený. Keďže naša aplikácia je určená pre používateľov na prihlásenie/odhlásenie, táto funkcia je potrebná na každej stránke.

Ďalej skontrolujeme, či je používateľ prihlásený. Ak áno, aktualizujeme $_SESSION["user"], aby odrážali najnovšie informácie o používateľovi. Napríklad, ak používateľ zmení svoj e-mail, starý sa uloží do relácie. Ale s automatickou aktualizáciou sa to nestane.

Týmto sa končí druhá časť! Zajtra sa môžete tešiť na záverečnú lekciu na túto tému.

Všetko najlepšie!

Tí, ktorí viac či menej vážne študovali PHP vedzte, že existuje jedno veľmi užitočné globálne pole PHP ktorý sa volá $_SERVER. A v tomto článku by som chcel analyzovať najobľúbenejšie kľúče a ich hodnoty v tomto poli, pretože ich znalosť je jednoducho povinná aj pre začiatočníkov PHP programátor.

Skôr ako začnete globálne pole $_SERVER v PHP, hneď vám dám malú nápovedu. Je tam zabudovaná skvelá funkcia PHP, ktorý sa nazýva phpinfo(). Okamžite uvedieme príklad jeho použitia:

phpinfo();
?>

V dôsledku vykonania tohto jednoduchého skriptu uvidíte obrovskú tabuľku s rôznymi Nastavenia PHP interpreta, vrátane, na konci bude tabuľka hodnôt globálne pole $_SERVER. Zobrazí zoznam všetkých kľúčov a ich zodpovedajúcich hodnôt. Ako vám to môže pomôcť? A faktom je, že ak potrebujete túto alebo tú hodnotu a zabudnete, ako sa kľúč volá, použite funkciu phpinfo() Jeho názov si vždy zapamätáte. Vo všeobecnosti spustíte tento skript a okamžite ma pochopíte.

Teraz prejdime k najpopulárnejším na kľúče poľa $_SERVER:

  • HTTP_USER_AGENT- tento kľúč vám umožňuje zistiť vlastnosti klienta. Vo väčšine prípadov je to určite prehliadač, nie však vždy. A opäť, ak je to prehliadač, tak ktorý, o tom sa dozviete v tejto premennej.
  • HTTP_REFERER- obsahuje absolútnu cestu k tomuto súboru ( PHP skript, HTML stránku), z ktorého sme prešli na tento skript. Zhruba povedané, odkiaľ klient pochádza.
  • SERVER_ADDR - IP adresa server.
  • REMOTE_ADDR - IP adresa klienta.
  • DOCUMENT_ROOT- fyzická cesta ku koreňovému adresáru stránky. Táto možnosť sa nastavuje cez Konfiguračný súbor servera Apache.
  • SCRIPT_FILENAME- fyzická cesta k volanému skriptu.
  • QUERY_STRING- veľmi užitočná hodnota, ktorá vám umožňuje získať reťazec s požiadavkou a potom môžete tento reťazec analyzovať.
  • REQUEST_URI- ešte užitočnejšia hodnota, ktorá obsahuje nielen samotnú požiadavku, ale aj relatívnu cestu k volanému skriptu z koreňa. Toto sa veľmi často používa na odstránenie duplicity z index.php, teda keď máme takých URL: "http://mysite.ru/index.php"A" http://mysite.ru/“ vedú na jednu stránku a URL iné, teda duplicitné, čo bude mať zlý vplyv na optimalizáciu pre vyhľadávače. A s pomocou REQUEST_URI môžeme určiť: s index.php alebo sa scenár nevolal. A môžeme urobiť presmerovanie s index.php(ak bol prítomný v REQUEST_URI) zapnuté bez index.php. V dôsledku toho pri odosielaní takejto žiadosti: " http://mysite.ru/index.php?id=5“, budeme presmerovaní na URL: "http://mysite.ru/?id=5". To znamená, že sme sa zbavili duplicity odstránením z URL toto index.php.
  • SCRIPT_NAME- relatívna cesta k volanému skriptu.

Možno sú to všetky prvky globálne pole $_SERVER v PHP ktoré sa pravidelne používajú. Musíte ich poznať a vedieť ich použiť v prípade potreby.



Ak si všimnete chybu, vyberte časť textu a stlačte Ctrl+Enter
ZDIEĽAŤ: