Internet Windows Android

Server php fără păcat. Matrice superglobală $_SERVER

$HTTP_SERVER_VARS [șters]

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

$_SERVER -- $HTTP_SERVER_VARS [șters]Informații despre server și mediul de execuție

Descriere

Variabila $_SERVER este o matrice care conține informații precum anteturile scripturilor, căile și locațiile. Intrările din această matrice sunt create de serverul web. Nu există nicio garanție că fiecare server web va oferi oricare dintre ele; serverul poate omite unele dintre ele sau poate furniza altele care nu sunt enumerate aici. Cu toate acestea, multe dintre aceste variabile sunt prezente în specificația » CGI/1.1, așa că vă puteți aștepta să fie implementate pe serverul dvs. web.

Variabila $HTTP_SERVER_VARS conține aceleași informații inițiale, dar nu este superglobală. (Rețineți că $HTTP_SERVER_VARS și $_SERVER sunt variabile diferite, așa că PHP le tratează în consecință). De asemenea, rețineți că „matricele lungi” au fost eliminate în PHP 5.4.0, deci $HTTP_SERVER_VARS nu mai există.

Indici

Puteți găsi sau nu oricare dintre următoarele elemente în matricea $_SERVER. Rețineți că puține, dacă există, articole vor fi disponibile (sau vor face cu adevărat diferența) dacă PHP rulează pe linia de comandă.

„PHP_SELF” Numele fișierului script care rulează în prezent, în raport cu rădăcina documentului. De exemplu, $_SERVER["PHP_SELF"] în scriptul de la http://example.com/foo/bar.php ar fi /foo/bar.php . Constanta __FILE__ conține calea completă și numele fișierului curent (adică, conectat). Dacă PHP rulează pe linia de comandă, această variabilă conține numele scriptului, începând cu PHP 4.3.0. Anterior nu era disponibil."argv" O serie de argumente transmise scriptului. Când scriptul este rulat pe linia de comandă, oferă acces asemănător C la opțiunile din linia de comandă. Când este apelată prin metoda GET, această matrice va conține șirul de interogare."argc" Conține numărul de parametri trecuți scriptului (dacă este lansat pe linia de comandă).„GATEWAY_INTERFACE” Conține versiunea specificației CGI utilizată de server; De exemplu" CGI/1.1". „SERVER_ADDR” Adresa IP a serverului pe care rulează scriptul curent."NUMELE SERVERULUI" Numele gazdei pe care rulează scriptul curent. Dacă scriptul rulează pe o gazdă virtuală, acesta va conține numele definit pentru gazda virtuală respectivă.„SERVER_SOFTWARE” Șirul de identificare a serverului specificat în anteturi atunci când apare un răspuns la o solicitare.„SERVER_PROTOCOL” Numele și versiunea protocolului de informații prin care a fost solicitată pagina; De exemplu " HTTP/1.0"; „REQUEST_METHOD” Ce metodă a fost folosită pentru a solicita pagina; De exemplu " OBȚINE", "CAP", "POST", "A PUNE".

cometariu:

Scriptul PHP se iese după trimiterea antetelor (adică după efectuarea oricărei ieșiri fără a pune în tampon ieșirea), dacă cererea a fost făcută folosind metoda CAP.

„REQUEST_TIME” Marca temporală a începerii cererii. Disponibil începând cu PHP 5.1.0.„REQUEST_TIME_FLOAT” Marca temporală a începerii cererii, cu precizie de microsecunde. Disponibil începând cu PHP 5.4.0."ȘIR DE INTEROGARE" Șirul de interogare, dacă există, care a preluat pagina.„DOCUMENT_ROOT” Directorul rădăcină al documentului în care este executat scriptul curent este exact cel specificat în fișierul de configurare a serverului.„HTTP_ACCEPT” Conținutul antetului Accept: din cererea curentă, dacă există." HTTP_ACCEPT_CHARSET " Conținutul antetului Accept-Charset: din cererea curentă, dacă există. De exemplu: " izo-8859-1,*,utf-8". " HTTP_ACCEPT_ENCODING " Conținutul antetului Acceptare-codare: gzip". " HTTP_ACCEPT_LANGUAGE " Conținutul antetului Limba de acceptare: din cererea curentă, dacă există. De exemplu: " ro". „HTTP_CONNECTION” Conținutul antetului Conexiune: din cererea curentă, dacă există. De exemplu: " Ține în viață". „HTTP_HOST” Conținutul antetului Gazdă: din cererea curentă, dacă există.„HTTP_REFERER” Adresa paginii (dacă există) care a adus browserul utilizatorului la această pagină. Acest antet este setat de browserul web al utilizatorului. Nu toate browserele îl instalează, iar unele vă permit să modificați conținutul antetului HTTP_REFERER ca o funcție suplimentară. Într-un cuvânt, chiar nu se poate avea încredere în el." HTTP_USER_AGENT " Conținutul antetului Agent utilizator: din cererea curentă, dacă există. Această linie conține browserul pe care utilizatorul l-a folosit pentru a solicita această pagină. Un exemplu tipic este linia: Mozilla/4.5 (X11; U; Linux 2.2.9 i586). Printre altele, puteți utiliza această valoare cu funcția get_browser() pentru a adapta rezultatul paginii dvs. la capacitățile browserului utilizatorului„HTTPS” Acceptă o valoare nevidă dacă solicitarea a fost făcută prin protocolul HTTPS.

cometariu: Rețineți că atunci când utilizați ISAPI cu IIS, valoarea va fi oprit, dacă solicitarea nu a fost făcută prin HTTPS.

„REMOTE_ADDR” Adresa IP de la care utilizatorul vizualizează pagina curentă."GAZDA LA DISTANTA" Gazda la distanță de la care utilizatorul vizualizează pagina curentă. Căutarea inversă DNS se bazează pe valoarea variabilei REMOTE_ADDR.

cometariu: Serverul dvs. web trebuie să fie configurat pentru a crea această variabilă. De exemplu, în Apache aveți nevoie de prezența directivei Căutare nume de gazdă activatăîn fișierul httpd.conf astfel încât această variabilă să fie creată. Vezi si gethostbyaddr().

„REMOTE_PORT” Portul de pe mașina de la distanță care este utilizat pentru a comunica cu serverul web.„REMOTE_USER” Utilizator autentificat.„REDIRECT_REMOTE_USER” Utilizatorul autentificat dacă solicitarea a fost redirecționată intern.„SCRIPT_FILENAME”

Calea absolută către scriptul care se execută în prezent.

cometariu:

Dacă scriptul este rulat pe linia de comandă (CLI) folosind o cale relativă, cum ar fi file.php sau ../file.php , variabila $_SERVER["SCRIPT_FILENAME"] va conține calea relativă specificată de utilizator.

„SERVER_ADMIN” Această variabilă își obține valoarea (pentru Apache) dintr-o directivă din fișierul de configurare a serverului. Dacă scriptul rulează pe o gazdă virtuală, aceasta va fi valoarea definită pentru gazda virtuală respectivă.„SERVER_PORT” Portul de pe computerul server pe care îl folosește serverul web pentru a se conecta. Pentru setările implicite, valoarea va fi " 80 "; folosind SLL, de exemplu, această valoare va fi configurată pentru conexiunile HTTP securizate.

cometariu: Pentru a obține un port fizic (real) în Apache 2, trebuie să instalați UseCanonicalName = ActivatȘi UseCanonicalPhysicalPort = Activat, în caz contrar, această valoare poate fi înlocuită și nu poate returna valoarea reală a portului fizic. Bazarea pe această valoare este nesigură în contextul aplicațiilor care necesită securitate sporită.

„SERVER_SIGNATURE” Un șir care conține versiunea serverului și numele gazdei virtuale care este adăugat la paginile generate de server, dacă este activat.„PATH_TRANSLATED” Calea bazată pe sistemul de fișiere (nu pe rădăcina documentului) către scriptul curent, după ce serverul a făcut orice mapare virtual-real.

cometariu: Începând cu PHP 4.3.2, variabila PATH_TRANSLATED nu mai este setată implicit în Apache 2 SAPI, în comparație cu Apache versiunea 1, unde a fost setată la aceeași valoare ca variabila SCRIPT_FILENAME atunci când nu este utilizată de Apache. Această modificare a fost făcută pentru a se conforma cu specificația CGI, unde variabila PATH_TRANSLATED ar trebui să existe numai atunci când este definită PATH_INFO. Utilizatorii Apache 2 pot folosi directiva AcceptPathInfo = Activatîn fișierul de configurare httpd.conf pentru a seta variabila PATH_INFO.

„SCRIPT_NAME” Conține calea către scriptul care se execută în prezent. Acest lucru este util pentru paginile care trebuie să indice către ele însele. Constanta __FILE__ conține calea completă și numele fișierului curent (adică inclus).„REQUEST_URI” URI care a fost transmis pentru a accesa această pagină. De exemplu, " /index.html". „PHP_AUTH_DIGEST” Când se efectuează autentificarea HTTP Digest, acestei variabile i se atribuie antetul „Autorizare”, care este trimis de client (acesta trebuie apoi utilizat pentru validarea corespunzătoare).„PHP_AUTH_USER” Când se realizează autentificarea HTTP, această variabilă este setată la numele de utilizator furnizat de utilizator.„PHP_AUTH_PW” Când se realizează autentificarea HTTP, această variabilă este setată la parola furnizată de utilizator.„AUTH_TYPE” Când se realizează autentificarea HTTP, această variabilă este setată la tipul de autentificare care este utilizat.„PATH_INFO” Conține orice cale furnizată de utilizator după numele scriptului, dar înaintea șirului de interogare, dacă este disponibil. De exemplu, dacă scriptul curent este solicitat de adresa URL http://www.example.com/php/path_info.php/some/stuff?foo=bar , atunci variabila $_SERVER["PATH_INFO"] va conține /niste chestii?>

Rezultatul rulării acestui exemplu va fi ceva de genul acesta.

În primul rând, vom îmbunătăți pagina de înregistrare adăugând posibilitatea de a încărca un avatar. Imaginea sursă trebuie să fie în format jpg, gif sau png. De asemenea, nu ar trebui să depășească 2 MB. Nu vă faceți griji, după ce este comprimat de script, dimensiunea avatarului va fi de aproximativ 3 kb și format jpg. Deschide pagina reg.phpși adăugați-l în etichetă < formă> linia enctype="multipart/form-data", ca în exemplu:


Înregistrare










Acum să economisim reg.php

2. Apoi trebuie să creați un alt câmp în tabel utilizatorii. Să mergem la phpmyadmin, selectați baza de date și tabelul dorite.


Setăm toate valorile ca în figură:

Calea către avatar va fi înregistrată în acest câmp și va fi salvată într-un folder separat, să-l numim „avataruri”. Dosarul va fi localizat în același director ca și restul fișierelor script.

3. Accesați fișierul Salvați_ utilizator. phpși adăugați următorul cod după eliminarea spațiilor din autentificare și parolă:

//eliminați spațiile suplimentare
$login = trim($login);

// adăuga nou ********************************************

//adăugați o verificare pentru lungimea login-ului și a parolei
if (strlen($login)< 3 or strlen($login) > 15) {
exit(„Conectarea trebuie să conțină cel puțin 3 caractere și nu mai mult de 15.”);
}
dacă (strlen($parolă)< 3 or strlen($password) > 15) {
exit(„Parola trebuie să aibă cel puțin 3 caractere și nu mai mult de 15.”);
}

if (!empty($_POST["fupload"])) //verifică dacă utilizatorul a trimis imaginea
{
$fupload=$_POST["fupload"]; $fupload = trim($fupload);
dacă ($fupload =="" sau gol ($fupload)) (
unset($fupload);// dacă variabila $fupload este goală, atunci ștergeți-o
}
}
dacă (!isset($fupload) sau empty($fupload) sau $fupload =="")
{
//dacă variabila nu există (utilizatorul nu a trimis o imagine), atunci atribuiți-i o imagine pre-preparată cu inscripția „fără avatar”
$avatar = "avatars/net-avatara.jpg"; //puteți desena net-avatara.jpg sau îl puteți lua de la sursă
}
altfel
{
//în caz contrar - încărcați imaginea utilizatorului
$path_to_90_directory = "avatars/";//folder unde se vor încărca imaginea inițială și copia sa comprimată

Dacă(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["fupload"]["nume"])) //verificarea formatului imaginii sursă
{
$filename = $_FILES["fupload"]["nume"];
$sursa = $_FILES["fupload"]["tmp_name"];
$țintă = $cale_la_director_90 . $nume fișier;
move_uploaded_file($sursă, $țintă);//încărcarea originalului în folderul $path_to_90_directory
if(preg_match("/[.](GIF)|(gif)$/", $nume fișier)) (
$im = imaginecreatefromgif($calea_la_directorul_90.$nume fișier) ; //dacă originalul a fost în format gif, atunci creați o imagine în același format. Necesar pentru compresia ulterioară
}
if(preg_match("/[.](PNG)|(png)$/", $nume fișier)) (
$im = imagecreatefrompng($path_to_90_directory.$filename) ;//dacă originalul era în format png, atunci creați imaginea în același format. Necesar pentru compresia ulterioară
}

Dacă(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $nume fișier)) (
$im = imagecreatefromjpeg($cale_la_director_90.$nume fisier); //dacă originalul a fost în format jpg, atunci creați o imagine în același format. Necesar pentru compresia ulterioară
}
//CREAREA IMAGINII PĂTRATATE ȘI COMPRESIA ULTERIORĂ A EI LUAT DE PE SITE-UL www.codenet.ru
// Creați un pătrat de 90x90
// dest - imaginea rezultată
// w - lățimea imaginii
// raport - coeficient de proporționalitate
$w = 90; // pătrat 90x90. Poate fi furnizat și în alte dimensiuni.
// creează imaginea originală pe baza
// fișierul sursă și stabiliți dimensiunea acestuia
$w_src = imaginix($im); //calculați lățimea
$h_src = imagesy($im); //calculeaza inaltimea imaginii
// creează o imagine pătrată goală
// truecolor este important!, altfel vom avea un rezultat de 8 biți
$dest = imaginecreatetruecolor($w,$w);
// decupați centrul pătratului la x dacă fotografia este orizontală
dacă ($w_src>$h_src)
imagecopyresamped($dest, $im, 0, 0,
rotund((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
// decupați vârful pătrat de-a lungul y,
// dacă fotografia este verticală (deși puteți folosi și mijlocul)
dacă ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));
// imaginea pătrată este scalată fără tăiere
dacă ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$data=ora(); //calculează ora curentă.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//salvați imaginea în format jpg în folderul dorit, numele va fi ora curentă. Creat pentru a preveni ca avatarurile să aibă aceleași nume.
//de ce jpg? Ocupă foarte puțin spațiu + animația imaginii GIF, care distrage atenția utilizatorului, este distrusă. Nu este foarte plăcut să-i citești comentariul când observi o mișcare cu coada ochiului.
$avatar = $path_to_90_directory.$date.".jpg";//puneți calea către avatar în variabilă.
$delfull = $cale_la_director_90.$nume fisier;
deconectați ($delfull);//ștergeți imaginea originală încărcată, nu mai avem nevoie de ea. Sarcina a fost de a obține o miniatură.
}
altfel
{
//în cazul nepotrivirii formatului, emite un mesaj corespunzător
exit("Avatarul trebuie să fie în formatul JPG, GIF sau PNG");
}
//sfârșitul procesului de încărcare și atribuirea variabilei $avatar a adresei ava încărcate
}



// a adăugat nou ************************************************ **
// Urmează totul din prima parte a articolului, dar trebuie să adăugați o modificare la interogarea bazei de date.
//conectează-te la baza de date
// verifică existența unui utilizator cu aceeași autentificare
$rezultat = mysql_query("SELECT ID FROM users WHERE login="$login"",$db);
dacă (!empty($myrow["id"])) (
exit("Ne pare rău, datele de conectare introduse sunt deja înregistrate. Vă rugăm să introduceți o altă autentificare.");
}
// dacă nu există așa ceva, atunci salvați datele
$result2 = mysql_query("INSERT INTO users (login,parola,avatar) VALUES("$login","$parola","$avatar")");
// Verificați dacă există erori
dacă ($rezultat2=="TRUE")
{
echo "Te-ai inregistrat cu succes! Acum poti intra pe site. Pagina de pornire";
}
altceva(
echo „Eroare! Nu sunteți înregistrat.”;
}
?>

4. Trebuie să adăugați un tabel la aceeași bază de date. Va stoca adrese IP care au făcut erori la conectare. Astfel, putem restricționa accesul celor care au greșit de mai mult de trei ori la rând timp de aproximativ 15 minute. Cred că programele care selectează parolele vor trebui să se schimbe mult timp.
Să mergem la phpmyadmin și să creăm un nou tabel cu 3 câmpuri:


ip - adresa IP.
data - data autentificării nereușite în ultimele 15 minute pentru utilizatorul cu acest ip. col - numărul de erori din ultimele 15 minute pentru utilizatorul cu acest ip.
Grozav! Gata, acum să schimbăm fișierul de conectare și de verificare a parolei, pentru că acum parola noastră este criptată. Deschide testreg.php și șterge totul dincolo de eliminarea spațiilor din login și parolă. În continuare adăugăm următorul cod:

//eliminați spațiile suplimentare
$login = trim($login);
$parola = trim($parola);

// înlocuiți cu unul nou******************************************** ******
// se conectează la baza de date
include("bd.php");// fișierul bd.php trebuie să fie în același folder cu toate celelalte, dacă nu este, atunci doar schimbați calea
// mini-verificare pentru selectarea parolei
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (gol ($ip) || $ip=="necunoscut") ($ip=getenv("REMOTE_ADDR"); )//extract ip
mysql_query ("ȘTERGERE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(data) > 900");//ștergeți adresele IP ale utilizatorilor care au făcut o greșeală la conectare după 15 minute.
$result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db // preia din baza de date numărul de încercări nereușite de conectare în ultimele 15 pentru un utilizator cu o anumită ip);
$myrow = mysql_fetch_array($rezultat);
dacă ($myrow["col"] > 2) (
//dacă există mai mult de două erori, adică trei, atunci emitem un mesaj.
exit("V-ați introdus numele de utilizator sau parola greșit de 3 ori. Vă rugăm să așteptați 15 minute înainte de a încerca din nou.");
}
$parolă = md5($parolă);//criptați parola
$parolă = strrev($parolă);// pentru fiabilitate, adăugați invers
$parolă = $parolă."b3p6f";
//puteți adăuga câteva dintre propriile dvs. caractere după gust, de exemplu, introducând „b3p6f”. Dacă această parolă este piratată cu forța brută pe serverul lor folosind același md5, atunci evident că nu va ieși nimic bun din ea. Dar te sfătuiesc să pui și alte personaje, poate la începutul rândului sau la mijloc.
//În acest caz, este necesar să măriți lungimea câmpului de parolă din baza de date. Parola criptată poate fi mult mai mare.

$rezultat = mysql_query("SELECT * FROM users WHERE login="$login" AND password="$parola"",$db); //preluați din baza de date toate datele despre utilizator cu autentificarea și parola introduse
$myrow = mysql_fetch_array($rezultat);
dacă (gol ($myrow["id"]))
{
//dacă utilizatorul cu autentificarea și parola introduse nu există
//Facem o înregistrare că acest ip nu s-a putut conecta.
$select = mysql_query("SELECT IP FROM oshibka WHERE ip="$ip"");
$tmp = mysql_fetch_row($select);
if ($ip == $tmp) (//verificați dacă utilizatorul se află în tabelul „oshibka”
$rezultat52 = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db);
$myrow52 = mysql_fetch_array($rezultat52);
$col = $myrow52 + 1;//adăugați încă o încercare de conectare nereușită
mysql_query("UPDATE error SET col=$col,date=NOW() WHERE ip="$ip"");
}
altceva(
mysql_query("INSERT INTO oshibka (ip,data,col) VALUES ("$ip",NOW(),"1")");
//dacă nu au existat erori în ultimele 15 minute, atunci introduceți o nouă intrare în tabelul „oshibka”
}

exit(„Ne pare rău, numele de utilizator sau parola pe care le-ați introdus sunt incorecte.”);
}
altceva(
nbsp; //dacă parolele se potrivesc, atunci lansăm o sesiune pentru utilizator! Îl poți felicita, a intrat!
$_SESSION["parola"]=$myrow["parola"];
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//aceste date sunt folosite foarte des, astfel încât utilizatorul conectat le va „purta cu el”

//În continuare salvăm datele în cookie-uri pentru autentificarea ulterioară.
//ATENŢIE!!! FACEȚI ACEST LA DISCREȚIA DVS., deoarece DATELE SUNT STOCATE ÎN COOKIE-URI FĂRĂ CRIPTARE
dacă ($_POST[„salvare”] == 1) (
//Dacă utilizatorul dorește ca datele sale să fie salvate pentru autentificarea ulterioară, atunci le salvăm în cookie-urile browserului său
setcookie("login", $_POST["login"], time()+9999999);
setcookie("parolă", $_POST["parolă"], oră()+9999999);
}}
ecou" ";//redirecționăm utilizatorul către pagina principală, unde îl vom anunța de autentificare reușită
?>

5. Vom schimba complet pagina principală. Este necesar să afișați avatarul utilizatorului pe acesta, să afișați un link pentru a vă deconecta din cont și să adăugați o casetă de selectare pentru a vă aminti parola atunci când vă conectați.
Index.php

// întreaga procedură funcționează în sesiuni. Este locul în care sunt stocate datele utilizatorului în timp ce acesta se află pe site. Este foarte important să le lansăm chiar la începutul paginii!!!
sesiune_start();
include("bd.php");// fișierul bd.php trebuie să fie în același folder cu toate celelalte, dacă nu este, atunci doar schimbați calea
dacă (!empty($_SESSION["login"]) și !empty($_SESSION["parolă"]))
{
//dacă există o autentificare și o parolă în sesiuni, atunci verificați-le și preluați avatarul
$login = $_SESSION["login"];
$parolă = $_SESSION[„parolă”];
$rezultat = mysql_query("SELECT id, avatar FROM utilizatorii WHERE login="$login" AND password="$parola"",$db);
$myrow = mysql_fetch_array($rezultat);
//extrage datele necesare utilizatorului
}
?>


pagina principala


pagina principala

dacă (!isset($myrow["avatar"]) sau $myrow["avatar"]="") (
//verifică dacă datele utilizatorului au fost extrase din baza de date. Dacă nu, atunci el nu este autentificat sau parola din sesiune este incorectă. Afișăm o fereastră de conectare. Dar nu o vom afișa pentru cei care intră, nu mai au nevoie.
imprimare<<


AICI;

Dacă (isset($_COOKIE["login"])) //există o variabilă cu autentificare în COOKIE. Ar trebui să fie dacă utilizatorul a făcut clic pe caseta de selectare „Ține-mă minte” în timpul conectării anterioare
{
//dacă da, atunci introduceți valoarea sa în formular. În acest caz, utilizatorului i se arată că autentificarea sa a fost deja introdusă în coloana necesară
echo " value="".$_COOKIE["login"]."">";
}

imprimare<<




AICI;

Dacă (isset($_COOKIE["parolă"]))//dacă există o variabilă cu o parolă în COOKIE. Ar trebui să fie dacă utilizatorul a făcut clic pe caseta de selectare „Ține-mă minte” în timpul conectării anterioare
{
//dacă da, atunci introduceți valoarea sa în formular. În acest caz, utilizatorului i se arată că parola sa a fost deja introdusă în coloana necesară
echo " value="".$_COOKIE["parolă"]."">";
}

Imprimare<<



Ține-mă minte.






Inregistreaza-te



Sunteți autentificat ca invitat

AICI;
}
altfel
{
//dacă autentificarea are succes, utilizatorului i se dă tot ce este mai jos între asteriscuri.

imprimare<<
Sunteți conectat pe site ca $_SESSION (ieșire)


Acest link este disponibil numai pentru utilizatorii înregistrați

Avatarul tau:




AICI;

//************************************************************************************
//dacă autentificarea este reușită, utilizatorului i se dă tot ce se află SUS între asteriscuri.
}
?>



6. Este necesar să se facă posibilă deconectarea utilizatorilor conectați. Exista deja un link pentru a ieși pe pagina principală. Dar acest fișier nu există încă. Deci, să creăm un fișier nou ieșire.php cu cod:

sesiune_start();
if (gol($_SESSION["login"]) sau gol($_SESSION["parolă"]))
{
//dacă nu există o sesiune cu autentificare și parolă, atunci acest fișier a fost accesat de un utilizator neconectat. El nu aparține aici. Emitem un mesaj de eroare și oprim scriptul
ieșire („Accesul la această pagină este permis numai utilizatorilor înregistrați. Dacă sunteți înregistrat, atunci conectați-vă la site folosind numele de utilizator și parola dvs.
Pagina principala");
}

unset($_SESSION["parolă"]);
unset($_SESSION["login"]);
unset($_SESSION["id"]);// distruge variabilele din sesiuni
Ieșire(" ");
// trimite utilizatorul la pagina principală.
?>

OK, totul sa terminat acum! Bucură-te de el pentru sănătatea ta! Noroc!

Elementul $_SERVER["DOCUMENT_ROOT"] conține calea către directorul rădăcină al serverului, dacă scriptul este executat într-o gazdă virtuală, acest element specifică calea către directorul rădăcină al gazdei virtuale; Acestea. în fișierul de configurare httpd.conf, gazda virtuală are o directivă DocumentRoot setată la „D:/main”, elementul $_SERVER[“DOCUMENT_ROOT”] va conține valoarea „D:main”.

element $_SERVER[„HTTP_ACCEPT”].

Elementul $_SERVER["HTTP_ACCEPT"] descrie preferințele clientului pentru tipul de document. Conținutul acestui element este preluat din antetul Accept HTTP trimis de client către server. Conținutul acestui antet ar putea arăta astfel

Imagine/gif, imagine/x-xbitmap, imagine/jpeg, imagine/pjpeg, aplicație/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*

Antetul Accept vă permite să specificați tipul media pe care clientul preferă să îl primească ca răspuns la cererea sa. Acest antet informează serverul că răspunsul este limitat la un set mic de tipuri preferate.

Simbolul * este folosit pentru a grupa tipuri într-o serie media. De exemplu, simbolul */* specifică utilizarea tuturor tipurilor, iar tipul de notație/* specifică utilizarea tuturor subtipurilor tipului de tip selectat.

cometariu

Tipurile media sunt separate prin virgule.

Fiecare serie media este, de asemenea, caracterizată de un set suplimentar de parametri. Unul dintre ele este așa-numitul coeficient de preferință relativă q, care ia valori de la 0 la 1, respectiv, de la tipurile mai puțin preferate la cele mai preferate. Utilizarea mai multor parametri q permite clientului să spună serverului preferința sa relativă pentru un anumit tip de media.

cometariu

În mod implicit, parametrul q este 1. De asemenea, este separat de tipul media printr-un punct și virgulă.

Exemplu de antet Accept:

Accept: audio/*; q=0,2, audio/de bază

În acest antet, primul tip este audio/*, care include toate documentele muzicale și se caracterizează printr-un coeficient de preferință de 0,2. Separat prin virgule, este indicat tipul audio/de baza, pentru care nu este specificat coeficientul de preferinta si ia o valoare implicita de unu. Citarea acestui titlu poate fi interpretată astfel: „Prefer tipul audio/de bază, dar pot trimite și documente de orice alt tip audio, dacă sunt disponibile, după reducerea factorului de preferință cu mai mult de 80%”.

Exemplul poate fi mai complex.

Accept: text/plan simplu; q=0,5, text/html,
text/x-dvi; q=0,8, text/x-c

cometariu

Rețineți că elementul $_SERVER["HTTP_ACCEPT"] conține exact aceleași informații, dar fără antetul inițial Accept.

Acest antet este interpretat după cum urmează: Sunt preferate tipurile de document text/html și text/x-c, dar dacă acestea nu sunt disponibile, atunci clientul care face această solicitare va prefera text/x-dvi și, dacă nu este disponibil, poate accepta tipul text/ simplu

Element $_SERVER[„HTTP_ACCEPT_LANGUAGE”]

Elementul $_SERVER["HTTP_ACCEPT_LANGUAGE"] descrie preferința de limbă a clientului. Aceste informații sunt extrase din antetul HTTP Accept-Language pe care clientul îl trimite către server. Se poate da următorul exemplu:

Accept-Language: ru, en; q=0,7

Ceea ce poate fi interpretat astfel: clientul preferă limba rusă, dar dacă aceasta nu este disponibilă, este de acord să accepte documente în limba engleză. Elementul $_SERVER["HTTP_ACCEPT_LANGUAGE"] va conține exact aceleași informații, dar fără antetul Accept-Language:

Ru, en; q=0,7

Conținutul elementului $_SERVER["HTTP_ACCEPT_LANGUAGE"] poate fi folosit pentru a determina naționalitatea vizitatorilor. Cu toate acestea, rezultatele vor fi aproximative, deoarece mulți utilizatori folosesc versiuni în limba engleză ale browserelor, care vor anunța serverul că vizitatorul preferă o singură limbă - engleza.

Element $_SERVER[„HTTP_HOST”]

Elementul $_SERVER["HTTP_HOST"] conține numele serverului, care de obicei se potrivește cu numele de domeniu al site-ului situat pe server. De obicei, numele specificat în acest parametru este același cu numele $_SERVER[„SERVER_NAME”]. Parametrul conține doar numele domeniului fără numele protocolului (http://), adică.

www.sofftime.ru

Element $_SERVER[„HTTP_REFERER”]

Elementul $_SERVER["HTTP_REFERER"] conține adresa paginii de la care vizitatorul a ajuns la această pagină. Tranziția trebuie efectuată printr-un link. Să creăm două pagini index.php și page.php.

pagina index.php

ecou "Link către pagina PHP
"
;
$_SERVER[„HTTP_REFERER”]
?>

Pagina page.php va avea un conținut similar, dar linkul va indica pagina index.php.

Pagina page.php

ecou "Link către pagina PHP
"
;
echo "Conținutul $_SERVER ["HTTP_REFERER"] - " .
$_SERVER[„HTTP_REFERER”]
?>

La trecerea de la o pagină la alta, sub link va fi afișată adresa paginii de la care s-a făcut tranziția.

Element $_SERVER[„HTTP_USER_AGENT”]

Elementul $_SERVER["HTTP_USER_AGENT"] conține informații despre tipul și versiunea browserului și a sistemului de operare al vizitatorului.

Iată un conținut tipic al acestei linii: „Mozilla/4.0 (compatibil; MSIE 6.0; Windows NT 5.1)”. Prezența subșirului „MSIE 6.0” indică faptul că vizitatorul vizualizează pagina folosind Internet Explorer versiunea 6.0. Linia „Windows NT 5.1” indică faptul că sistemul de operare este Windows XP.

cometariu

Pentru Windows 2000, elementul $_SERVER["HTTP_USER_AGENT"] arată astfel: "Mozilla/4.0 (compatibil; MSIE 5.01; Windows NT 5.0)"), în timp ce pentru Windows XP arată ca "Mozilla/4.0 (compatibil; MSIE 6.0) ;Windows NT 5.1)".

Dacă vizitatorul folosește browserul Opera, conținutul $_SERVER["HTTP_USER_AGENT"] ar putea arăta astfel: "Mozilla/4.0 (compatibil; MSIE 5.0; Windows 98) Opera 6.04". Aici este prezent și subșirul „MSIE 6.0”, indicând faptul că browserul Opera este compatibil cu browserul Internet Explorer și folosește aceleași biblioteci dinamice Windows. Prin urmare, atunci când analizați șirul returnat de browser, trebuie să aveți în vedere că Internet Explorer se referă la un șir care conține subșirul „MSIE 6.0” și care nu conține subșirul „Opera”. În plus, din această linie putem concluziona că utilizatorul folosește sistemul de operare Windows 98.

cometariu

Agentul utilizator al browserului Firefox ar putea arăta astfel: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5.

Când utilizați browserul Netscape, conținutul elementului $_SERVER["HTTP_USER_AGENT"] ar putea arăta astfel: "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1" . Apartenența acestui browser poate fi determinată de prezența subșirului „Netscape”. În plus, puteți afla că vizitatorul accesează Internetul folosind o versiune de operare a Linux, cu un nucleu optimizat pentru Pentium IV, în timp ce se află în shell-ul grafic X-Window. Acest mecanism este convenabil de utilizat pentru a colecta informații statistice, ceea ce le permite designerilor să optimizeze paginile pentru cele mai comune browsere.

Element $_SERVER[„REMOTE_ADDR”]

Elementul $_SERVER["REMOTE_ADDR"] conține adresa IP a clientului. Când testați pe o mașină locală, această adresă va fi egală cu 127.0.0.1. Totuși, la testarea în rețea, variabila va returna adresa IP a clientului sau ultimul server proxy prin care clientul a ajuns la server. Dacă clientul folosește un server proxy, puteți afla adresa IP a acestuia folosind variabila de mediu HTTP_X_FORWARDED_FOR, a cărei valoare poate fi obținută folosind funcția getenv().

cometariu

Serverele proxy sunt servere intermediare speciale care oferă un tip special de serviciu: comprimarea traficului, codificarea datelor, adaptarea pentru dispozitive mobile etc. Printre numeroasele servere proxy, există așa-numitele servere proxy anonime, care vă permit să ascundeți adresa IP adevărată a clientului, astfel de servere nu returnează variabila de mediu HTTP_X_FORWARDED_FOR.

Se preia variabila de mediu HTTP_X_FORWARDED_FOR

echo getenv(HTTP_X_FORWARDED_FOR);
?>

Element $_SERVER[„SCRIPT_FILENAME”]

Elementul $_SERVER["SCRIPT_FILENAME"] conține calea absolută către fișier de la rădăcina discului. Deci, dacă serverul rulează sistemul de operare Windows, atunci această cale poate arăta astfel: „d:main estindex.php”, adică. calea este specificată de pe disc într-un sistem de operare asemănător UNIX, calea este specificată din directorul rădăcină /, de exemplu „/var/share/www/test/index.php”.

Element $_SERVER[„SERVER_NAME”]

Elementul $_SERVER[„SERVER_NAME”] conține numele serverului, care de obicei se potrivește cu numele de domeniu al site-ului aflat pe acesta. De exemplu,

www.site

Conținutul elementului $_SERVER["SERVER_NAME"] este adesea același cu conținutul elementului $_SERVER["HTTP_HOST"]. Pe lângă numele serverului, matricea superglobală $_SERVER vă permite să aflați o serie de parametri ai serverului, de exemplu, adresa IP a serverului, portul de ascultare, ce server Web este instalat și versiunea protocolului HTTP. Aceste informații sunt plasate în elementele $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] și, respectiv, $_SERVER["SERVER_PROTOCOL". Mai jos este un exemplu de utilizare a acestor elemente.

Utilizarea elementelor de matrice $_SERVER

echo "Nume server - " . $_SERVER[„SERVER_NAME”]. "
" ;
ecou "Adresa IP a serverului - ". $_SERVER[„SERVER_ADDR”]. "
" ;
echo "Port server - " . $_SERVER[„SERVER_PORT”]. "
" ;
echo "Server web - " . $_SERVER[„SOFTWARE_SERVER”]. "
" ;
ecou "Versiunea protocolului HTTP - ". $_SERVER[„PROTOCOL_SERVER”]. "
" ;
?>

Și asta este ceea ce clientul a folosit de fapt ca „gazdă țintă” a cererii. SERVER_NAME este definit în configurația serverului. Care depinde de ce ai nevoie. Acum ar trebui să înțelegeți că aceasta este o valoare controlată de client, care, prin urmare, nu este de încredere pentru utilizare în logica de afaceri, iar cealaltă este o valoare controlată de server, care este mai fiabilă. Cu toate acestea, trebuie să vă asigurați că serverul web are configurația corectă SERVER_NAME. Luând Apache HTTPD ca exemplu, iată un extras din documentația acestuia:

Dacă ServerName nu este specificat, atunci serverul încearcă să deducă numele de gazdă efectuând o căutare inversă a adresei IP. Dacă nu este specificat niciun port în ServerName , atunci serverul va folosi portul din cererea de intrare. Pentru o fiabilitate și predictibilitate optime, ar trebui să specificați un nume de gazdă și un port explicit folosind directiva ServerName.

Actualizați: După ce ați verificat răspunsul lui Pekka la întrebarea dvs., care conține un link către răspunsul lui Bobince, PHP va returna întotdeauna valoarea HTTP_HOST pentru SERVER_NAME, ceea ce contrazice propria mea experiență cu PHP 4.x + Apache HTTPD 1.2.x de acum câțiva ani. , am aruncat praful de pe actualul meu XAMPP pe Windows XP (Apache HTTPD 2.2.1 cu PHP 5.2.8), l-am rulat, am creat o pagină PHP care imprimă ambele valori, am creat o aplicație Java de testare folosind URLConnection pentru a schimba antetul Host, iar testele m-au învățat că acesta este într-adevăr (incorect) cazul.

După ce am suspectat mai întâi PHP și am săpat în unele Rapoarte de eroare PHP referitor la subiect, am aflat că rădăcina problemei este în serverul web folosit, că returna incorect antetul HTTP Host atunci când a fost solicitat SERVER_NAME. Așa că am săpat în Rapoarte de eroare Apache HTTPD folosind diverse cuvinte cheie relativ subiect și am găsit în sfârșit eroarea aferentă. Acest comportament a fost introdus de la Apache HTTPD 1.3. Trebuie să setați directiva UseCanonicalName în intrare ServerName în httpd.conf (verificați și avertismentul din partea de jos a documentului!).

ServerName example.com UtilizațiCanonicalName activat

Acest lucru a funcționat pentru mine.

Generalizat, SERVER_NAME este mai de încredere, dar tu dependentîn configurația serverului!

HTTP_HOST este gazda țintă trimisă de client. Utilizatorul îl poate manipula liber. Nu este nevoie să trimiteți o solicitare către site-ul dvs. prin care să vă solicitați valoarea HTTP_HOST pentru www.stackoverflow.com.

SERVER_NAME provine din definiția serverului VirtualHost și, prin urmare, este considerat mai fiabil. De asemenea, poate fi manipulat extern în anumite condiții legate de configurarea serverului dvs. web. Vezi asta Această întrebare SO, care abordează aspectele de securitate ale ambelor opțiuni.

Nu ar trebui să te bazezi pe el pentru a fi în siguranță. Cu toate acestea, pe care să o folosiți depinde cu adevărat de ceea ce doriți să faceți. Dacă doriți să determinați pe ce domeniu rulează scriptul dvs., puteți utiliza în siguranță HTTP_HOST atâta timp cât valorile nevalide care provin de la un atacator nu pot sparge nimic.

Rețineți că, dacă doriți să utilizați IPv6, probabil că veți dori să utilizați HTTP_HOST mai degrabă decât SERVER_NAME. Dacă introduceți http://[::1]/ , variabilele de mediu vor fi după cum urmează:

HTTP_HOST = [::1] SERVER_NAME = ::1

Aceasta înseamnă că, dacă faci mod_rewrite, de exemplu, poți obține rezultate urâte. Exemplu de redirecționare SSL:

# SERVER_NAME NU va funcționa - Redirecționare către https://::1/ RewriteRule .* https://%(SERVER_NAME)/ # HTTP_HOST va funcționa - Redirecționare către https://[::1]/ RewriteRule .* https: //%(HTTP_HOST)/

Acest lucru se aplică NUMAI dacă accesați serverul fără un nume de gazdă.

dacă doriți să verificați prin server.php sau orice doriți să apelați cu următoarele:

Apoi accesați toate adresele URL valide pentru site-ul dvs. și testați diferența.

Mi-a luat ceva timp să înțeleg ce înseamnă oamenii prin „SERVER_NAME este mai de încredere”. Folosesc un server partajat și nu am acces la directivele de gazdă virtuală. Deci, folosesc mod_rewrite în .htaccess pentru a mapa diferite HTTP_HOST-uri în diferite directoare. În acest caz, această valoare HTTP_HOST are sens.

Situația este similară dacă utilizați gazde virtuale bazate pe nume: directiva ServerName din interiorul unei gazde virtuale vă spune pur și simplu ce nume de gazdă va fi mapat la acea gazdă virtuală. Concluzia este că, în ambele cazuri, numele de gazdă furnizat de client în momentul solicitării (HTTP_HOST) trebuie să se potrivească cu numele de pe server, care este el însuși mapat la director. Dacă maparea este făcută împotriva directivelor gazdei virtuale sau împotriva regulilor htaccess mod_rewrite este secundar aici. În aceste cazuri, HTTP_HOST va fi același cu SERVER_NAME. Mă bucur că Apache este configurat astfel.

Cu toate acestea, situația este diferită pentru gazdele virtuale bazate pe IP. În acest caz și numai în acest caz, SERVER_NAME și HTTP_HOST pot fi diferite deoarece clientul selectează acum serverul după IP, nu după nume. Într-adevăr, pot exista configurații speciale în care acest lucru este important.

Deci, de acum înainte, voi folosi SERVER_NAME în cazul în care codul meu este portat în aceste configurații speciale.

Presupunând că aveți o configurare simplă (CentOS 7, Apache 2.4.x și PHP 5.6.20) și un singur site web (fără a presupune găzduire partajată)...

În sensul PHP, $_SERVER[„SERVER_NAME”] este un element PHP înregistrat în superclasa $_SERVER bazat pe configurația dvs. Apache (directiva **ServerName** cu UseCanonicalName On) în httpd.conf (fie dintr-o configurație de gazdă virtuală activată). dosar, orice etc.). HTTP_HOST deduse din antetul gazdei HTTP. Luați în considerare acest lucru drept intrare de utilizator. Filtrați și verificați înainte de utilizare.

Iată un exemplu în care folosesc $_SERVER[„SERVER_NAME”] ca bază pentru comparație. Următoarea metodă este pe o anumită clasă copil pe care am numit-o ServerValidator (copilul Validator). ServerValidator verifică șase sau șapte elemente în $_SERVER înainte de a le folosi.

Când determin dacă o solicitare HTTP este un POST, folosesc această metodă.

Funcția publică isPOST() ( return (($this->requestMethod === „POST”) && // Ignora $this->hasTokenTimeLeft() && // Ignora $this->hasSameGETandPOSTIdentities() && // Ingore ($this ->httpHost === filter_input(INPUT_SERVER, "SERVER_NAME")));

Până la apelarea acestei metode, toată filtrarea și validarea elementelor $_SERVER corespunzătoare (și seturile de proprietăți corespunzătoare) vor fi făcute.

($this->httpHost === filter_input(INPUT_SERVER, „SERVER_NAME”)

Verifică dacă valoarea $_SERVER["HTTP_HOST"] (obținută în cele din urmă din antetul gazdei HTTP solicitat) se potrivește cu $_SERVER["SERVER_NAME"] .

Acum folosesc conversația superglobală pentru a-mi explica exemplul, dar asta pentru că unii oameni nu sunt familiarizați cu INPUT_GET , INPUT_POST și INPUT_SERVER în legătură cu filter_input_array() .

Concluzia este că nu procesez cererile POST pe serverul meu decât dacă sunt îndeplinite toate cele patru condiții. Prin urmare, în ceea ce privește solicitările POST, eșecul de a furniza antetul gazdei HTTP (prezența verificată pentru mai devreme) vrăji doom pentru browsere stricte HTTP 1.0. În plus, gazda solicitată trebuie să se potrivească cu valoarea Numele serveruluiîn httpd.conf, și prin extensie - valoarea $_SERVER ("SERVER_NAME") în supermaclonul $_SERVER. Din nou, aș folosi INPUT_SERVER cu funcții de filtru PHP, dar mi-ai întrerupt deriva.

După cum a afirmat balusC, SERVER_NAME nu este de încredere și poate fi schimbat în configurația apache, configurația serverului și firewall-ul care pot fi între dvs. și server.

Următoarea funcție returnează întotdeauna gazda reală (gazdă introdusă de utilizator) fără portul și este aproape sigură:

Funcția getRealHost())( list($realHost,)=explode(":",$_SERVER["HTTP_HOST"]); return $realHost; )

acțiune

JavaScript este blocat în browserul dvs. Vă rugăm să activați JavaScript pentru ca site-ul să funcționeze!

Matrice superglobală $_SERVER

A matrice $_SERVER Interpretul PHP plasează variabilele primite de la server. Fără aceste variabile, este dificil să se organizeze suport complet pentru aplicațiile Web. Mai jos este o descriere a celor mai importante elemente ale matricei superglobale $_SERVER.

cometariu

  • Vizualizați lista completă a elementelor matricei $_SERVER
  • puteți fie să utilizați funcția print_r(), care imprimă un dump de matrice, fie să utilizați funcția phpinfo(), care afișează informații despre interpretul PHP.

    Array ( => on => 200 => on => htmlweb.ru => https => 443 => close => Mozilla/5.0 (compatibil; Googlebot/2.1; +http://www.google.com/bot. html) => */* => beget=begetok => gzip,deflate => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin = > => Apache/2.4.25 (Debian) mpm-itk/2.4.7-04 OpenSSL/1.0.2l => htmlweb.ru => 185.12.92.137 => 80 => 144.76.78.4 => /var/www/ htmlweb/data/www/htmlweb.ru => http => => /var/www/htmlweb/data/www/htmlweb.ru => [email protected]=>.php => 35242 => /php/function/$_server.php => CGI/1.1 => HTTP/1.0 => GET => => /php/function/%24_server.php => /index.php => /index.php => 1560059525.711 => 1560059525) 1

    $_SERVER[" DOCUMENT_ROOT"]

    Elementul $_SERVER["DOCUMENT_ROOT"] conține calea către directorul rădăcină al serverului, dacă scriptul este executat într-o gazdă virtuală, acest element specifică calea către directorul rădăcină al gazdei virtuale; Acestea. în fișierul de configurare httpd.conf, gazda virtuală are o directivă DocumentRoot setată la „D:/main”, elementul $_SERVER[“DOCUMENT_ROOT”] va conține valoarea „D:main”.

    $_SERVER[" REMOTE_ADDR"]

    Elementul $_SERVER["REMOTE_ADDR"] conține adresa IP a clientului. Când testați pe o mașină locală, această adresă va fi egală cu 127.0.0.1. Totuși, la testarea în rețea, variabila va returna adresa IP a clientului sau ultimul server proxy prin care clientul a ajuns la server. Dacă clientul folosește un server proxy, puteți afla adresa IP a acestuia folosind variabila de mediu HTTP_X_FORWARDED_FOR, a cărei valoare poate fi obținută folosind funcția getenv().

    cometariu

    Serverele proxy sunt servere intermediare speciale care oferă un tip special de serviciu: comprimarea traficului, codificarea datelor, adaptarea pentru dispozitive mobile etc. Printre numeroasele servere proxy, există așa-numitele servere proxy anonime, care vă permit să ascundeți adresa IP adevărată a clientului, astfel de servere nu returnează variabila de mediu HTTP_X_FORWARDED_FOR.

    Preluarea unei variabile de mediu HTTP_X_FORWARDED_FOR

    echo @getenv(HTTP_X_FORWARDED_FOR);

    $_SERVER[" SCRIPT_FILENAME"]

    Elementul $_SERVER["SCRIPT_FILENAME"] conține calea absolută către fișier de la rădăcina discului. Deci, dacă serverul rulează sistemul de operare Windows, atunci această cale poate arăta astfel: „d:main estindex.php”, adică. calea este specificată de pe disc într-un sistem de operare asemănător UNIX, calea este specificată din directorul rădăcină /, de exemplu „/var/share/www/test/index.php”.

    /var/www/htmlweb/data/www/site/index.php

    $_SERVER[" NUMELE SERVERULUI"]

    Elementul $_SERVER[„SERVER_NAME”] conține numele serverului, care de obicei se potrivește cu numele de domeniu al site-ului aflat pe acesta. De exemplu,

    Conținutul elementului $_SERVER["SERVER_NAME"] este adesea același cu conținutul elementului $_SERVER["HTTP_HOST"]. Pe lângă numele serverului, matricea superglobală $_SERVER vă permite să aflați o serie de parametri ai serverului, de exemplu, adresa IP a serverului, portul de ascultare, ce server Web este instalat și versiunea protocolului HTTP. Aceste informații sunt plasate în elementele $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] și, respectiv, $_SERVER["SERVER_PROTOCOL". Mai jos este un exemplu de utilizare a acestor elemente.

    Utilizarea elementelor de matrice $_SERVER

    echo "Numele serverului este ".$_SERVER["SERVER_NAME"]."
    "; echo "Adresa IP a serverului este ".$_SERVER["SERVER_ADDR"]."
    "; echo "Port server - ".$_SERVER["SERVER_PORT"]."
    "; echo "Server web - ".$_SERVER["SERVER_SOFTWARE"]."
    "; echo "Versiunea protocolului HTTP - ".$_SERVER["SERVER_PROTOCOL"]."
    ";

    Nume server - site web
    Adresa IP a serverului - 185.12.92.137
    Port server - 80
    Server web - Apache/2.4.25 (Debian) mpm-itk/2.4.7-04 OpenSSL/1.0.2l
    Versiunea protocolului HTTP - HTTP/1.0

    $_SERVER[" REQUEST_METHOD"]

    Elementul $_SERVER["REQUEST_METHOD"] conține metoda de solicitare care este folosită pentru a apela scriptul: GET sau POST.

    Echo $_SERVER[„REQUEST_METHOD”];

    $_SERVER[" ȘIR DE INTEROGARE"]

    Elementul $_SERVER["QUERY_STRING"] conține parametrii trecuți scriptului dacă șirul de interogare este o adresă

    De exemplu, când accesați:
    elementul $_SERVER["QUERY_STRING"] va conține tot textul după semnul "?"

    Echo $_SERVER[„QUERY_STRING”];

    id=1&test=wet&id_theme=512

    $_SERVER[" PHP_SELF"]

    Elementul $_SERVER["PHP_SELF"] conține numele scriptului, pornind de la directorul rădăcină al gazdei virtuale, adică. dacă șirul de interogare este o adresă http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 atunci elementul $_SERVER["PHP_SELF"] va conține fragmentul „/test/index.php”. De obicei, același fragment este plasat în elementul $_SERVER[„SCRIPT_NAME”].

    $_SERVER[" REQUEST_URI"]

    Elementul $_SERVER["REQUEST_URI"] conține numele scriptului, pornind de la directorul rădăcină al gazdei virtuale și parametri, adică. dacă șirul de interogare este o adresă: http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 atunci elementul $_SERVER["REQUEST_URI"] va conține fragmentul „/test/index.php?id=1&test=wet&id_theme=512”. Pentru a restabili adresa completă în script, care este plasată în linia de interogare, este suficient să folosiți combinația de elemente din tabloul $_SERVER prezentată mai jos

    Adresă completă a scenariului

    echo "http://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];