Patuvaba server php. Globaalne massiiv $_SERVER PHP-s. Kasutame sisseehitatud serverit

JavaScript on teie brauseris blokeeritud. Saidi toimimiseks lubage JavaScript!

Superglobaalne massiiv $_SERVER

Massiiviks $_SERVER PHP-tõlk paigutab serverist saadud muutujad. Ilma nende muutujateta on veebirakenduste täielikku tuge raske korraldada. Allpool on superglobaalse massiivi olulisemate elementide kirjeldus $_SERVER.

Kommenteeri

  • Vaadake massiivi $_SERVER elementide täielikku loendit
  • võite kasutada funktsiooni print_r(), mis prindib massiivi väljavõtte, või funktsiooni phpinfo(), mis kuvab teavet PHP tõlgi kohta.

    Massiiv ( => sisse => 200 => sisse => htmlweb.ru => https => 443 => sulge => Mozilla/5.0 (ühildub; 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 => [e-postiga kaitstud]=>.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"]

    Element $_SERVER["DOCUMENT_ROOT"] sisaldab serveri juurkataloogi teed, kui skript käivitatakse virtuaalses hostis, määrab see element tee virtuaalse hosti juurkataloogi. Need. konfiguratsioonifailis httpd.conf on virtuaalsel hostil DocumentRoot direktiiv seatud väärtusele "D:/main", element $_SERVER["DOCUMENT_ROOT"] sisaldab väärtust "D:main".

    $_SERVER[" REMOTE_ADDR"]

    Element $_SERVER["REMOTE_ADDR"] sisaldab kliendi IP-aadressi. Kohalikus masinas testimisel on see aadress 127.0.0.1. Võrgus testides tagastab muutuja aga kliendi IP-aadressi või viimase puhverserveri, mille kaudu klient serverisse jõudis. Kui klient kasutab puhverserverit, saate selle IP-aadressi teada keskkonnamuutuja HTTP_X_FORWARDED_FOR abil, mille väärtuse saab hankida funktsiooni getenv() abil.

    Kommenteeri

    Puhverserverid on spetsiaalsed vaheserverid, mis pakuvad spetsiaalset tüüpi teenust: liikluse tihendamine, andmete kodeerimine, kohandamine mobiilseadmete jaoks jne. Paljude puhverserverite hulgas on nn anonüümsed puhverserverid, mis võimaldavad varjata kliendi tegelikku IP-aadressi, sellised serverid ei tagasta HTTP_X_FORWARDED_FOR keskkonnamuutujat.

    Keskkonnamuutuja toomine HTTP_X_FORWARDED_FOR

    kaja @getenv(HTTP_X_FORWARDED_FOR);

    $_SERVER[" SCRIPT_FILENAME"]

    Element $_SERVER["SCRIPT_FILENAME"] sisaldab kettajuurest faili absoluutset teed. Seega, kui serveris töötab Windowsi operatsioonisüsteem, võib see tee välja näha järgmine: “d:main estindex.php”, st. tee on määratud kettalt UNIX-i sarnases operatsioonisüsteemis, tee määratakse juurkataloogist /, näiteks "/var/share/www/test/index.php".

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

    $_SERVER[" SERVER_NAME"]

    Element $_SERVER["SERVER_NAME"] sisaldab serveri nime, mis tavaliselt ühtib sellel asuva saidi domeeninimega. Näiteks,

    Elemendi $_SERVER["SERVER_NAME"] sisu on sageli sama, mis elemendi $_SERVER["HTTP_HOST"] sisu. Lisaks serveri nimele võimaldab superglobaalne massiiv $_SERVER teada saada mitmeid serveri parameetreid, näiteks serveri IP-aadressi, kuulamispordi, milline veebiserver on installitud ja HTTP-protokolli versiooni. See teave paigutatakse vastavalt elementidesse $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] ja $_SERVER["SERVER_PROTOCOL"]. Allpool on näide nende elementide kasutamisest.

    Massiivi $_SERVER elementide kasutamine

    echo "Serveri nimi on ".$_SERVER["SERVER_NAME"]."
    "; echo "Serveri IP-aadress on ".$_SERVER["SERVER_ADDR"]."
    "; echo "Serveri port - ".$_SERVER["SERVER_PORT"]."
    "; echo "Veebiserver - ".$_SERVER["SERVER_TARKVARA"]."
    "; echo "HTTP-protokolli versioon - ".$_SERVER["SERVER_PROTOCOL"]."
    ";

    Serveri nimi – sait
    Serveri IP-aadress - 185.12.92.137
    Serveri port - 80
    Veebiserver – Apache/2.4.25 (Debian) mpm-itk/2.4.7-04 OpenSSL/1.0.2l
    HTTP-protokolli versioon – HTTP/1.0

    $_SERVER[" REQUEST_METHOD"]

    Element $_SERVER["REQUEST_METHOD"] sisaldab päringumeetodit, mida kasutatakse skripti kutsumiseks: GET või POST.

    Echo $_SERVER["REQUEST_METHOD"];

    $_SERVER[" QUERY_STRING"]

    Element $_SERVER["QUERY_STRING"] sisaldab skriptile edastatud parameetreid, kui päringustring on aadress

    Näiteks juurdepääsul:
    element $_SERVER["QUERY_STRING"] sisaldab kogu teksti pärast märki "?"

    Kaja $_SERVER["QUERY_STRING"];

    id=1&test=wet&id_theme=512

    $_SERVER[" PHP_ISE"]

    Element $_SERVER["PHP_SELF"] sisaldab skripti nime, alustades virtuaalse hosti juurkataloogist, st. kui päringustring on aadress http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 siis element $_SERVER["PHP_SELF"] sisaldab fragmenti "/test/index.php". Tavaliselt paigutatakse sama fragment $_SERVER["SCRIPT_NAME"] elemendisse.

    $_SERVER[" REQUEST_URI"]

    Element $_SERVER["REQUEST_URI"] sisaldab skripti nime, alustades virtuaalse hosti juurkataloogist ja parameetritest, st. kui päringustring on aadress: http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 siis element $_SERVER["REQUEST_URI"] sisaldab fragmenti "/test/index.php?id=1&test=wet&id_theme=512". Päringureale paigutatud skripti täieliku aadressi taastamiseks piisab, kui kasutada allpool toodud massiivi $_SERVER elementide kombinatsiooni

    Täielik aadress skriptile

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

    Ja see on see, mida klient tegelikult kasutas päringu "sihthostjana". SERVER_NAME on serveri konfiguratsioonis määratletud. Milline neist sõltub sellest, milleks seda vajate. Nüüd peaksite mõistma, et see on kliendi juhitav väärtus, mis pole seega äriloogikas kasutamiseks usaldusväärne, ja teine ​​​​on serveri kontrollitav väärtus, mis on usaldusväärsem. Peate siiski tagama, et veebiserveril oleks õige SERVER_NAME konfiguratsioon. Võttes näiteks Apache HTTPD, on siin väljavõte selle dokumentatsioonist:

    Kui ServerName pole määratud, proovib server IP-aadressi pöördotsingu abil hostinime järeldada. Kui jaotises ServerName pole porti määratud, kasutab server sissetuleva päringu porti. Optimaalse töökindluse ja prognoositavuse tagamiseks peaksite serverinime direktiivi abil määrama selge hostinime ja pordi.

    Värskenda: Pärast Pekka vastuse kontrollimist teie küsimusele, mis sisaldab linki bobince'i vastusele, tagastab PHP alati SERVER_NAME väärtuse HTTP_HOST, mis on vastuolus minu enda paari aasta taguse kogemusega PHP 4.x + Apache HTTPD 1.2.x , puhusin tolmu maha oma praeguselt XAMPP-lt Windows XP-s (Apache HTTPD 2.2.1 koos PHP 5.2.8-ga), käivitasin selle, lõin PHP lehe, mis prindib mõlemad väärtused, lõin Java testrakenduse URLConnectioni abil hosti päise muutmiseks, ja testid õpetasid mulle, et see on tõepoolest (valesti) nii.

    Pärast esmalt PHP kahtlustamist ja mõnesse süvenemist PHP veaaruanded teemaga seoses sain teada, et probleemi juur on kasutatavas veebiserveris, et see tagastas valesti HTTP hosti päise, kui SERVER_NAME taotleti. Nii et ma süvenesin Apache HTTPD veaaruanded kasutades erinevaid märksõnu suhteliselt teema ja lõpuks leidsin sellega seotud vea. Seda käitumist tutvustati alates Apache HTTPD 1.3 versioonist. Peate kirjes sisse lülitama käsu UseCanonicalName ServerName failis httpd.conf (kontrollige ka hoiatust dokumendi allosas!).

    ServerName example.com UseCanonicalName sees

    See töötas minu jaoks.

    Üldiselt on SERVER_NAME usaldusväärsem, kuid teie sõltuv serveri konfiguratsioonis!

    HTTP_HOST on kliendi saadetud sihthost. Kasutaja saab kasutajaga vabalt manipuleerida. Pole vaja saata oma saidile päringut, milles küsitakse www.stackoverflow.com HTTP_HOST väärtust.

    SERVER_NAME pärineb VirtualHosti serveri definitsioonist ja seetõttu peetakse seda usaldusväärsemaks. Seda saab ka väliselt manipuleerida teatud tingimustel, mis on seotud teie veebiserveri seadistusega. Vaata seda See NII küsimus, mis käsitleb mõlema valiku turvaaspekte.

    Ohutuse tagamiseks ei tohiks sellele loota. Kuid mida kasutada, sõltub tegelikult sellest, mida soovite teha. Kui soovite määrata, millises domeenis teie skript töötab, võite turvaliselt kasutada HTTP_HOST-i, kuni ründajalt pärinevad kehtetud väärtused ei saa midagi rikkuda.

    Pange tähele, et kui soovite kasutada IPv6, siis tõenäoliselt soovite kasutada HTTP_HOSTi, mitte SERVER_NAME. Kui sisestate http://[::1]/ , on keskkonnamuutujad järgmised:

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

    See tähendab, et kui teete näiteks mod_rewrite, võite saada ebameeldivaid tulemusi. SSL-i ümbersuunamise näide:

    # SERVER_NAME EI tööta – ümbersuunamine aadressile https://::1/ RewriteRule .* https://%(SERVER_NAME)/ # HTTP_HOST töötab – ümbersuunamine aadressile https://[::1]/ RewriteRule .* https: //%(HTTP_HOST)/

    See kehtib AINULT siis, kui sisenete serverisse ilma hostinimeta.

    kui soovite kontrollida server.php kaudu või mis iganes soovite helistada, kasutades järgmist:

    Seejärel avage kõik oma saidi kehtivad URL-id ja testige erinevust.

    Mul kulus veidi aega, enne kui sain aru, mida inimesed mõtlevad sõnadega "SERVER_NAME on usaldusväärsem". Kasutan jagatud serverit ja mul pole juurdepääsu virtuaalse hosti direktiividele. Seega kasutan faili mod_rewrite failis .htaccess, et kaardistada erinevates kataloogides erinevaid HTTP_HOST-e. Sel juhul on see HTTP_HOST väärtus mõistlik.

    Sarnane on olukord, kui kasutate nimepõhiseid virtuaalhoste: virtuaalses hostis olev ServerName direktiiv ütleb teile lihtsalt, milline hostinimi selle virtuaalse hostiga vastendatakse. Põhimõte on see, et mõlemal juhul peab kliendi poolt päringu ajal antud hostinimi (HTTP_HOST) ühtima serveris oleva nimega, mis on ise kataloogiga seotud. See, kas vastendamine toimub virtuaalse hosti direktiivide või htaccess mod_rewrite reeglite alusel, on siin teisejärguline. Nendel juhtudel on HTTP_HOST sama, mis SERVER_NAME. Mul on hea meel, et Apache on nii konfigureeritud.

    IP-põhiste virtuaalsete hostide puhul on olukord aga erinev. Sel juhul ja ainult sel juhul võivad SERVER_NAME ja HTTP_HOST erineda, kuna klient valib serveri nüüd IP, mitte nime järgi. Tõepoolest, seal võib olla erikonfiguratsioone, kus see on oluline.

    Nüüdsest kasutan ma serverit SERVER_NAME juhuks, kui mu kood porditakse nendesse erikonfiguratsioonidesse.

    Eeldusel, et teil on lihtne seadistus (CentOS 7, Apache 2.4.x ja PHP 5.6.20) ja ainult üks veebisait (ei eelda jagatud hostimist)...

    PHP mõistes on $_SERVER["SERVER_NAME"] PHP element, mis on registreeritud ülemklassis $_SERVER, mis põhineb teie Apache konfiguratsioonil (**ServerName** direktiiv koos UseCanonicalName On) failis httpd.conf (kas siis lubatud virtuaalse hosti konfiguratsioonist fail, midagi jne). HTTP_HOST tuletatud HTTP hosti päisest. Võtke seda kasutaja sisendiks. Enne kasutamist filtreerige ja kontrollige.

    Siin on näide, kus ma kasutan võrdlusalusena $_SERVER["SERVER_NAME"]. Järgmine meetod on konkreetsel alamklassil, mida ma nimetasin ServerValidatoriks (Validatori laps). ServerValidator kontrollib enne nende kasutamist kuus või seitse elementi $_SERVERis.

    Kui otsustan, kas HTTP-päring on POST, kasutan seda meetodit.

    Avalik funktsioon isPOST() ( return (($this->requestMethod === "POST") && // Ignoreeri $this->hasTokenTimeLeft() && // Ignoreeri $this->hasSameGETandPOSTIdentities() && // Ingore ($this ->httpHost === filter_input(INPUT_SERVER, "SERVER_NAME")));

    Selle meetodi väljakutsumise ajaks on kõik vastavate $_SERVER elementide (ja vastavate atribuutide komplektide) filtreerimine ja valideerimine tehtud.

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

    Kinnitab, et $_SERVER["HTTP_HOST"] väärtus (lõpuks saadi taotletud HTTP hosti päisest) ühtib $_SERVER["SERVER_NAME"] .

    Nüüd kasutan oma näite selgitamiseks superglobaalset kõnet, kuid selle põhjuseks on asjaolu, et mõned inimesed ei ole filtri_input_array() suhtes INPUT_GET , INPUT_POST ja INPUT_SERVER tuttavad.

    Lõpptulemus on see, et ma ei töötle oma serveris POST-i päringuid, kui kõik neli tingimust pole täidetud. Seega, mis puudutab POST-i päringuid, siis HTTP hosti päise suutmatus (olemasolu kontrollitud varem) rangete brauserite jaoks. HTTP 1.0. Lisaks peab taotletud host vastama väärtusele ServeriNimi failis httpd.conf ja laienduse järgi - väärtus $_SERVER("SERVER_NAME") supermaklonis $_SERVER. Jällegi, ma kasutaksin PHP-filtri funktsioonidega INPUT_SERVER, kuid te rikkusite mu triivi.

    Nagu balusC väitis, ei ole SERVER_NAME usaldusväärne ja seda saab muuta teie ja serveri vahelises apache konfiguratsioonis, serveriserveri konfiguratsioonis ja tulemüüris.

    Järgmine funktsioon tagastab alati tõelise hosti (kohandatud tüüpi hosti) ilma pordita ja see on peaaegu lollikindel:

    Funktsioon getRealHost())( list($realHost,)=explode(":",$_SERVER["HTTP_HOST"]); tagasta $realHost; )

    jagada

    Esiteks täiustame registreerimislehte, lisades avatari üleslaadimise võimaluse. Lähtepilt peab olema jpg-, gif- või png-vormingus. Samuti ei tohiks see olla suurem kui 2 MB. Ärge muretsege, pärast skripti poolt selle tihendamist on avatari suurus umbes 3 kb ja jpg-vormingus. Avage leht reg.php ja lisage see sildile < vormi> rida enctype="multipart/form-data", nagu näites:


    Registreerimine










    Nüüd hoiame kokku reg.php

    2. Seejärel peate tabelisse looma teise välja kasutajad. Lähme juurde phpmyadmin, valige soovitud andmebaas ja tabel.


    Seadsime kõik väärtused nagu joonisel:

    Avatari tee salvestatakse sellele väljale ja see salvestatakse eraldi kausta, nimetagem seda "avatarideks". Kaust asub ülejäänud skriptifailidega samas kataloogis.

    3. Minge faili juurde salvestada_ kasutaja. php ja lisage järgmine kood pärast sisselogimisnimest ja paroolist tühikute eemaldamist:

    //eemaldage lisatühikud
    $login = trimmi($login);

    // lisa uus ************************************************

    //lisage sisselogimise ja parooli pikkuse kontroll
    if (strlen($login)< 3 or strlen($login) > 15) {
    exit("Sisselogimine peab koosnema vähemalt 3 ja mitte rohkem kui 15 tähemärgist.");
    }
    if (strlen($parool)< 3 or strlen($password) > 15) {
    exit("Parool peab olema vähemalt 3 tähemärki ja mitte rohkem kui 15.");
    }

    if (!empty($_POST["fuupload"])) //kontrolli, kas kasutaja on pildi saatnud
    {
    $fupload=$_POST["fuupload"]; $fuupload = trimmi($fuupload);
    if ($fupload =="" või tühi($fupload)) (
    unset($fupload);// kui muutuja $fupload on tühi, siis kustuta see
    }
    }
    if (!isset($fupload) või tühi($fupload) või $fupload =="")
    {
    //kui muutujat ei ole (kasutaja ei saatnud pilti), siis määrake sellele eelnevalt ettevalmistatud pilt kirjaga "avatari pole"
    $avatar = "avatars/net-avatara.jpg"; //saate joonistada net-avatara.jpg või võtta selle allikast
    }
    muidu
    {
    //muidu - laadige kasutaja pilt
    $path_to_90_directory = "avatars/";//kaust, kuhu laaditakse esialgne pilt ja selle tihendatud koopia

    If(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["taaslaadimine"]["nimi"])) //lähtepildi vormingu kontrollimine
    {
    $failinimi = $_FILES["taaslaadimine"]["nimi"];
    $allikas = $_FILES["fuupload"]["tmp_name"];
    $sihtmärk = $tee_90_kataloogi . $failinimi;
    move_uploaded_file($source, $target);//originaalfaili üleslaadimine kausta $tee_90_kataloogi
    if(preg_match("/[.](GIF)|(gif)$/", $failinimi)) (
    $im = imagecreatefromgif($tee_90_kataloogi.$failinimi) ; //kui originaal oli gif formaadis, siis loo samas formaadis pilt. Vajalik järgnevaks tihendamiseks
    }
    if(preg_match("/[.](PNG)|(png)$/", $failinimi)) (
    $im = imagecreatefrompng($tee_90_kataloogi.$failinimi) ;//kui originaal oli png-vormingus, siis loo pilt samas vormingus. Vajalik järgnevaks tihendamiseks
    }

    If(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $failinimi)) (
    $im = imagecreatefromjpeg($tee_90_kataloogi.$failinimi); //kui originaal oli jpg formaadis, siis loo samas formaadis pilt. Vajalik järgnevaks tihendamiseks
    }
    //SAIDILT www.codenet.ru Võetud ruutkujutise LOOMINE JA SELLE HILJEM KOMPRESSIOON
    // Looge ruut suurusega 90x90
    // dest – saadud pilt
    // w - pildi laius
    // suhe - proportsionaalsuskoefitsient
    $w = 90; // ruut 90x90. Võimalik tarnida ka teistes suurustes.
    // loob selle põhjal algse pildi
    // lähtefail ja määrake selle suurus
    $w_src = pildidx($im); //laiuse arvutamine
    $h_src = imagesy($im); //arvuta pildi kõrgus
    // looge tühi ruudukujuline pilt
    // truecolor on oluline!, muidu saame 8-bitise tulemuse
    $dest = imagecreatetruecolor($w,$w);
    // lõigake ruudu keskpunkt piki x-i välja, kui foto on horisontaalne
    kui ($w_src>$h_src)
    imagecopyresampled($dest, $im, 0, 0,
    round((max($w_src,$h_src)-min($w_src,$h_src))/2),
    0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
    // lõigake ruudukujuline ülaosa piki y-d välja,
    // kui foto on vertikaalne (kuigi võite kasutada ka keskmist)
    if ($w_src<$h_src)
    imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
    min($w_src,$h_src), min($w_src,$h_src));
    // ruudukujulist pilti skaleeritakse ilma kärpimata
    if ($w_src==$h_src)
    imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
    $kuupäev=kellaaeg(); //praegu kellaaja arvutamine.
    imagejpeg($dest, $tee_90_kataloogi.$kuupäev..jpg");//salvestage pilt jpg-vormingus soovitud kausta, nimeks saab praegune kellaaeg. Loodud selleks, et avataridel ei oleks samad nimed.
    //miks jpg? See võtab väga vähe ruumi + kasutaja tähelepanu hajutav GIF-pildi animatsioon hävib. Tema kommentaari pole eriti meeldiv lugeda, kui märkad silmanurgast liikumist.
    $avatar = $tee_90_kataloogi.$kuupäev..jpg";//pane avatari tee muutujasse.
    $delfull = $tee_90_kataloogi.$failinimi;
    unlink ($delfull);//kustutage algne üleslaaditud pilt, me ei vaja seda enam. Ülesandeks oli saada miniatuur.
    }
    muidu
    {
    //vormingu mittevastavuse korral väljasta vastav teade
    exit("Avatar peab olema vormingus JPG, GIF või PNG");
    }
    //laadimisprotsessi lõpp ja muutujale $avatar laaditud ava aadressi määramine
    }



    // lisas uus *************************************************** **
    // Järgmiseks tuleb kõik artikli esimesest osast, kuid andmebaasi päringule tuleb lisada muudatus.
    //ühendage andmebaasiga
    // kontrollige sama sisselogimisega kasutaja olemasolu
    $result = mysql_query("SELECT ID FROM kasutajatest WHERE login="$sisselogimine",$db);
    if (!empty($myrow["id"])) (
    exit("Vabandust, teie sisestatud sisselogimine on juba registreeritud. Palun sisesta teine ​​sisselogimine.");
    }
    // kui sellist asja pole, siis salvesta andmed
    $result2 = mysql_query("INSERT INTO kasutajad (sisselogimine,parool,avatar) VALUES("$sisselogimine","$parool","$avatar")");
    // Kontrollige, kas on vigu
    kui ($tulemus2=="TRUE")
    {
    echo "Oled edukalt registreerunud! Nüüd saate saidile siseneda. Avaleht";
    }
    muu (
    echo "Viga! Te pole registreerunud.";
    }
    ?>

    4. Peate samasse andmebaasi lisama ühe tabeli. See salvestab IP-aadressid, mis tegid sisselogimisel vigu. Nii saame piirata ligipääsu neile, kes eksisid rohkem kui kolm korda järjest, umbes 15 minuti jooksul.
    Läheme phpmyadminisse ja loome uue 3 väljaga tabeli:


    ip - IP-aadress.
    kuupäev - selle ip-ga kasutaja ebaõnnestunud sisselogimise kuupäev viimase 15 minuti jooksul. col – selle ip-ga kasutaja vigade arv viimase 15 minuti jooksul.
    Suurepärane! Valmis, nüüd muudame sisselogimise ja parooli kinnitusfaili, sest nüüd on meie parool krüptitud. Avage testreg.php ja kustutage kõik peale tühikute eemaldamise sisselogimisel ja paroolil. Järgmisena lisame järgmise koodi:

    //eemaldage lisatühikud
    $login = trimmi($login);
    $parool = trimmi($parool);

    // asendada uuega******************************************** *******
    // ühenduge andmebaasiga
    include("bd.php");// fail bd.php peab olema kõigi teistega samas kaustas, kui see pole, siis muuda lihtsalt teed
    // parooli valimise minikontroll
    $ip=getenv("HTTP_X_FORWARDED_FOR");
    if (tühi($ip) || $ip=="tundmatu") ( $ip=getenv("REMOTE_ADDR"); )//extract ip
    mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//kustutage 15 minuti pärast sisselogimisel vea teinud kasutajate IP-aadressid.
    $result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db // toovad andmebaasist välja antud IP-ga kasutaja ebaõnnestunud sisselogimiskatsete arvu viimase 15 jooksul);
    $myrow = mysql_fetch_array($tulemus);
    if ($myrow["col"] > 2) (
    //kui vigu on rohkem kui kaks ehk kolm, siis väljastame teate.
    exit("Sisestasite oma kasutajanime või parooli 3 korda valesti. Palun oodake 15 minutit enne uuesti proovimist.");
    }
    $parool = md5($password);//parool krüpteeritakse
    $password = strrev($password);// usaldusväärsuse huvides lisage vastupidine
    $parool = $parool."b3p6f";
    //saate oma maitse järgi lisada paar oma tegelast, näiteks sisestades "b3p6f". Kui see parool on toore jõuga sisse häkitud samas md5 serveris, siis ilmselgelt ei tule sellest midagi head. Aga soovitan panna teised märgid, võib-olla rea ​​algusesse või keskele.
    //Sellisel juhul on vaja andmebaasis paroolivälja pikkust suurendada. Krüpteeritud parool võib olla palju suurem.

    $result = mysql_query("SELECT * FROM kasutajad WHERE login="$sisselogimine" JA parool="$parool"",$db); //võtab andmebaasist kõik andmed sisestatud sisselogimise ja parooliga kasutaja kohta
    $myrow = mysql_fetch_array($tulemus);
    if (tühi($myrow["id"]))
    {
    //kui sisestatud sisselogimise ja parooliga kasutajat pole olemas
    //Teeme kirje, et see ip ei saanud sisse logida.
    $select = mysql_query("SELECT ip FROM oshibka WHERE ip="$ip"");
    $tmp = mysql_fetch_row($select);
    if ($ip == $tmp) (//kontrolli, kas kasutaja on tabelis "oshibka"
    $result52 = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db);
    $myrow52 = mysql_fetch_array($tulemus52);
    $col = $myrow52 + 1;//lisage veel üks ebaõnnestunud sisselogimiskatse
    mysql_query("UPDATE error SET col=$col,date=NOW() WHERE ip="$ip"");
    }
    muu (
    mysql_query("INSERT INTO oshibka (ip,date,col) VALUES ("$ip",NOW(),"1")");
    //kui viimase 15 minuti jooksul vigu ei esinenud, siis sisestage "oshibka" tabelisse uus kirje
    }

    exit("Vabandust, teie sisestatud kasutajanimi või parool on vale.");
    }
    muu (
    nbsp; //kui paroolid klapivad, siis käivitame kasutaja jaoks seansi! Võite teda õnnitleda, ta sai sisse!
    $_SESSION["parool"]=$myrow["parool"];
    $_SESSION["sisselogimine"]=$myrow["sisselogimine"];
    $_SESSION["id"]=$myrow["id"];//neid andmeid kasutatakse väga sageli, nii et sisselogitud kasutaja kannab neid endaga kaasas

    //Järgmisena salvestame andmed küpsistesse järgnevaks sisselogimiseks.
    //TÄHELEPANU!!! TEGE SEDA OMA VÄLJA VALMISTAMISEL, KUNA ANDMED SALVESTATAKSE KÜPSISES ILMA krüptimiseta
    if ($_POST["salvesta"] == 1) (
    //Kui kasutaja soovib, et tema andmed salvestataks järgnevaks sisselogimiseks, siis salvestame need tema brauseri küpsistesse
    setcookie("sisselogimine", $_POST["sisselogimine"], time()+9999999);
    setcookie("parool", $_POST["parool"], time()+9999999);
    }}
    kaja" ";//suuname kasutaja avalehele, kus teavitame teda edukast sisselogimisest
    ?>

    5. Muudame avalehe täielikult. Sellel on vaja kuvada kasutaja avatari, kuvada link kontolt väljalogimiseks ja lisada märkeruut, et sisselogimisel parool meeles pidada.
    Indeks.php

    // kogu protseduur toimib seanssidena. See on koht, kus kasutaja andmeid hoitakse saidil viibimise ajal. Väga oluline on need käivitada kohe lehe alguses!!!
    session_start();
    include("bd.php");// fail bd.php peab olema kõigi teistega samas kaustas, kui see pole, siis muuda lihtsalt teed
    if (!empty($_SESSION["sisselogimine"]) ja !empty($_SESSION["parool"]))
    {
    //kui seanssides on sisselogimine ja parool, siis kontrolli need üle ja too avatari
    $sisselogimine = $_SESSION["sisselogimine"];
    $parool = $_SESSION["parool"];
    $result = mysql_query("SELECT id,avatar FROM kasutajatest WHERE login="$sisselogimine" JA parool="$parool",$db);
    $myrow = mysql_fetch_array($tulemus);
    //võtab välja vajalikud kasutajaandmed
    }
    ?>


    Avaleht


    Avaleht

    if (!isset($myrow["avatar"]) või $myrow["avatar"]=="") (
    //kontrollib, kas kasutajaandmed on andmebaasist välja võetud. Kui ei, siis pole ta sisse logitud või seansi parool on vale. Kuvame sisselogimisakna. Aga sissetulnutele me seda välja ei pane, neil pole seda enam vaja.
    printida<<


    SIIN;

    If (isset($_COOKIE["login"])) //kas COOKIE-s on sisselogimisega muutuja. See peaks nii olema, kui kasutaja klõpsas eelmise sisselogimise ajal märkeruudul "Jäta mind meelde".
    {
    //kui jah, siis sisesta selle väärtus vormi. Sel juhul näidatakse kasutajale, et tema sisselogimine on juba vajalikku veergu sisestatud
    echo " value="".$_COOKIE["sisselogimine"]."">";
    }

    printida<<




    SIIN;

    If (isset($_COOKIE["parool"]))//kas COOKIE-s on parooliga muutuja. See peaks nii olema, kui kasutaja klõpsas eelmise sisselogimise ajal märkeruudul "Jäta mind meelde".
    {
    //kui jah, siis sisesta selle väärtus vormi. Sel juhul näidatakse kasutajale, et tema parool on juba nõutavasse veergu sisestatud
    echo " value="".$_COOKIE["parool"]."">";
    }

    Prindi<<



    Mäleta mind.






    Registreeri



    Olete külalisena sisse logitud

    SIIN;
    }
    muidu
    {
    //kui sisselogimine õnnestub, antakse kasutajale kõik allpool tärnide vahel.

    printida<<
    Olete saidile sisse logitud kasutajana $_SESSION (välju)


    See link on saadaval ainult registreeritud kasutajatele

    Sinu avatar:




    SIIN;

    //************************************************************************************
    //kui sisselogimine õnnestub, antakse kasutajale kõik, mis asub ÜLAL tärnide vahel.
    }
    ?>



    6. Vajalik on võimaldada sisseloginud kasutajatel välja logida. Avalehel oli juba link väljumiseks. Kuid seda faili pole veel olemas. Loome siis uue faili exit.php koodiga:

    session_start();
    if (tühi($_SESSION["sisselogimine"]) või tühi($_SESSION["parool"]))
    {
    //kui sisselogimise ja parooliga seanssi pole, siis pääses sellele failile ligi sisse logimata kasutaja. Ta ei kuulu siia. Saadame veateate ja peatame skripti
    exit ("Juurdepääs sellele lehele on lubatud ainult registreeritud kasutajatele. Kui olete registreerunud, logige saidile sisse oma kasutajanime ja parooliga
    Koduleht");
    }

    unset($_SESSION["parool"]);
    unset($_SESSION["sisselogimine"]);
    unset($_SESSION["id"]);// hävitada muutujad seanssides
    exit (" ");
    // saadab kasutaja avalehele.
    ?>

    OK, nüüd on kõik läbi! Nautige seda oma tervise nimel! Edu!

    • Tõlge
    • Õpetus

    PHP 5.4 üks lahedamaid uuendusi on sisseehitatud server, mis on loodud spetsiaalselt arendamiseks ja testimiseks. Nüüd saate koodi kirjutada ja testida ilma täieliku veebiserverita – lihtsalt käivitage sisseehitatud server, testige koodi ja sulgege see, kui olete lõpetanud.
    Server annab võimaluse ka loominguliseks kasutamiseks. Näiteks saate levitada kaasaskantavat veebirakendust CD-l või USB-l või isegi PHP-sse ehitatud töölauarakendusena ilma GTK-d või muid graafikateeke kasutamata.

    PHP käsiraamatus on rõhutatud, et sisseehitatud server on mõeldud arendamiseks ja seda on soovitatav mitte kasutada tootmisserveris. Serveri eest ei vastuta INI-direktiive (välja arvatud konsooli väljundi värvimine) ja tundub, et dokumentatsiooni põhiidee on: "meil on nüüd ka veebiserver, jätke meid rahule."
    Sellest hoolimata usun, et sisseehitatud server võib olla väärtuslik tööriist arenduseks ja testimiseks. Näiteks kasutan oma masinas mulle sobiva kohandatud konfiguratsiooniga eelinstallitud Apache'i, kuid mõnikord tahan proovida mõnda uut veebirakendust. Sisseehitatud veebiserveriga saan rakendust testida otse allalaaditavatest või ajutisest kaustast ning tavakeskkonda teisaldada vaid vajadusel.
    Kuid alustuseks pole see nii lihtne, sest paljud kirjutatud rakendused kasutavad .htaccess ja mod_rewrite. Kuid olen kindel, et keegi (võib-olla keegi teist, miks mitte?) kirjutab selle jaoks adapteri ja ma tahaksin olla esimene, kes seda testib.
    Selles artiklis selgitan mõningaid manustatud serveri põhikasutusi ja näitan teile, kuidas muuta see arenduseks ja testimiseks kasulikuks.

    Kasutame sisseehitatud serverit

    Seega on serveri kasutamiseks vaja php 5.4 või uuemat versiooni. PHP versiooni kontrollimiseks käivitage:
    php -v
    Samuti saate määrata, kas server on teie järgus saadaval, käivitades:
    php -h
    ja leidke sealt parameetrite "-S" ja "-t" kirjeldus, mida kasutatakse ainult serveri jaoks.
    Serveri testimiseks saate luua praeguses kataloogis faili index.php, mis sisaldab väljakutset funktsioonile phpinfo() ja seejärel käivitada server:
    $ php -S 127.0.0.1:8080 PHP 5.4.0RC7 arendusserver käivitus reedel 26. veebruar 18:49:29 2012 Kuulamine 127.0.0.1:8080 Dokumendi juur on /home/ec2-user. Väljumiseks vajutage klahvikombinatsiooni Ctrl-C.
    Ja nüüd näete sisseehitatud veebiserveri saadetud sisu:

    Iga kliendi päring kirjutatakse konsooli:
    80.180.55.37:36318 : / 80.180.55.37:36584 : /
    Minnes tagasi, vaatame käsurea parameetrit "-S", mida kasutatakse aadressi määramiseks, millelt server on juurdepääsetav. Võimalikud väärtused:
    kohalik host- serverile pääseb juurde ainult kohalikust masinast,
    0.0.0.0 - mis tahes masina liideses,
    Mis tahes väline või hall IP-aadress- ainult määratud IP-l
    Valik "-t" määrab määratud kataloogi "kataloogi juur". Näiteks:
    $ php -S :8090 -t /home/ec2-user/public
    Pealegi,. saate määrata konkreetse ruuteri faili nime. Näiteks:
    $ php -S >localhost või teie avalik IP>:8080 -t /home/ec2-user/public public/index.php
    Selle ruuteri väljundi parsib ja käivitab server. Lihtne näide:
    Tere tulemast PHP-sse

    ";
    Kui skript tagastab FALSE, töötleb nõutud URI-d server, mis kas tagastab nõutud ressursi või tagastab vea 404. Kui skript tagastab midagi muud, edastatakse skripti väljund kliendile.
    Kuigi see lähenemisviis annab meile suurema kontrolli, peaksite teadma mõnda asja. Esiteks pakub PHP-server ainult minimaalset HTTP-päiste komplekti:
    Ühendus: suletud Sisutüüp: text/html Host: aws-dev-01.vtardia.com X-Powered-By: PHP/5.4.0RC7 D
    Võrdleme seda Apache serveri tagastatud päistega:
    Aktsepteeritavad vahemikud: baidid Ühendus: Elus hoidmine Sisu pikkus: 631 Sisu tüüp: text/html Kuupäev: Laupäev, 04. veebruar 2012 18:24:42 GMT Etag: "bbb99-277-4ace8c5470a40" Elus hoidmine: aeg= 15, max = 100 Viimati muudetud: kolmapäeval, 14. september 2011 15:54:09 GMT Server: Apache/2.2.21 (Unix) DAV/2
    Kui teie rakendus kasutab päiseid, siis peab see arvestama arenduskeskkonna ja tootmise erinevusega.
    Teiseks on sisseehitatud serveril erinev SAPI (Server API). Seega saate indeksis php marsruutimise abil kindlaks teha, kas skriptile pääseb juurde test- või tootmisserveris. php_sapi_name() tagastab sisseehitatud serveris "cli-serveri":
    On üks spetsiaalne INI direktiiv - "cli_server.color". See direktiiv tagastab konsooli värvilise väljundi. Looge tühi fail nimega cli-server.ini ja kleepige see rida:
    cli_server.color = sees
    Saate luua oma serveri jaoks ainulaadse keskkonnakonfiguratsiooni, määrates oma INI-failis vajalikud juhised. Deklareerimata direktiivid võtavad oma vaikeväärtused. Nüüd oleme välja kuulutanud ainult ühe direktiivi - cli_server.color.
    Käivitage server parameetriga "-c", mis määrab INI-faili:
    $ php -S localhost -c cli-server.ini
    Kui teie terminal toetab värve, näete konsoolis värviväljundit. Olek 200 tõstetakse esile rohelisega, 404 olek on esile tõstetud oranžiga ja skriptivead tõstetakse esile punasega.

    Isikliku serveri loomine

    Nüüd, kui teate manustatud serveri kohta kõike, mida on vaja teada, teeme midagi lahedat. Loome oma kaasaskantava serveri!
    Alustan meie rakenduse järgmise struktuuriga:

    Kaust “library” sisaldab rakenduse koodi, “public” on juurkataloog, sisaldab index.php-d ja mitmeid staatilisi faile. Selles õpetuses pööratakse erilist tähelepanu kaustale "server" ja seega koosneb meie rakendus lihtsast "Tere sõna!" ja mitu pilti ja css.
    Meie eesmärk on serveri käivitamine rakenduste kataloogist ühe käsuga ning meie server hoolitseb marsruutimise, HTTP päiste ja vigade eest.
    $ ./start.sh
    Vaatame käivitusskripti:
    #! /bin/bash INIFILE="$(pwd)/server/server.ini" DOCROOT="$(pwd)/public" ROUTER="$(pwd)/server/router.php" HOST=0.0.0.0 PORT=8080 PHP=$(milline php), kui [ $? != 0 ] ; siis kaja "ei leia PHP" exit 1 fi $PHP -S $HOST:$PORT -c $INIFILE -t $DOCROOT $ROUTER
    Eeldan, et skripti käivitatakse rakenduste kataloogist, nii et INIFILE, DOCROOT, ROUTER on määratletud pwd abil. Php tee määratakse käsuga what. Kui php-d kasutaja $PATH-st ei leitud, siis skript nurjub.
    See töötab üsna hästi, kuid anname kasutajale võimaluse käsurealt mõnda etteantud parameetrit muuta, näiteks:
    kui [! -z $INIFILE ]; siis INIFILE="$(pwd)/server/server.ini" fi
    Jätkame, kaust “Errors” sisaldab HTTP-tõrketeadete faile. Siin on näide vea 403 kohta: kuigi ma kasutasin ainult HTML-i, ühendatakse skript, ma kasutan sisaldama nii et saate kasutada mis tahes php-koodi:
    403

    403: Keelatud

    Vabandust, taotletud ressurss pole juurdepääsetav.



    Vaatame nüüd ruuterit.php. Selle faili eesmärk on vastu võtta ja hallata kõiki päringuid ning edastada need serverisse ainult siis, kui see fail on olemas. Malli ühendamisel kuvatakse kõik vealehed.
    Esimestel ridadel määratlen mõned globaalsed parameetrid, näiteks DIRECTORY_INDEX, veamallidega kataloog. Parameeter date_default_timezone_set() peab ühtima OS-i sätetega, vastasel juhul tekivad logi ja serveri kirjete vahel vastuolud. Lisasin turvalisuse suurendamiseks ka lubatud IP-aadresside loendi.
    Funktsioon logAccess() on vajalik, sest kui marsruutimisskript saab päringu, ignoreeritakse serveri logi vaikimisi. Funktsioon aktsepteerib ainult olekukoodi ja väljundvorming ühtib täielikult serveri vorminguga.
    Meie esimene ülesanne on turvakontroll. Kui kliendi IP ei ole lubatud IP-de massiivi, kuvame veateate ja lõpetame skripti. Peame andma olekukoodi, mis pole 200 ja funktsioon header() siin ei tööta, seega kasutame uut funktsiooni - http_response_code.
    Kui kliendi IP on lubatud IP-de massiivi, siis meie järgmiseks sammuks on hankida soovitud tee ja faililaiend. Kui laiend on tühi, eeldame, et kasutaja taotleb kausta ja loome tee esmalt määratletud kataloogi DIRECTORY_INDEX kasutades.
    Lõpuks, kui soovitud fail on olemas, tagastame FALSE ja lubame serveril failile juurde pääseda. Kui ei, kuvatakse tõrketeade 404.

    Kokkuvõte

    See on kõik. Nagu näete, on php-serverit lihtne kasutada. Meie isiklik server on väga lihtne. Koodi saab optimeerida ja lisada keerukamatesse ja funktsionaalsematesse klassidesse. Head kodeerimist!

    p.s. Kriitika ja kommentaarid tõlke kohta võtan hea meelega vastu isiklikus sõnumis.

    Superglobaalne massiiv $_SERVER

    Üks olulisemaid eelmääratletud massiive on massiiv $_SERVER – PHP interpretaator paigutab sinna serverist saadud muutujad. Ilma nende muutujateta on veebirakenduste täielikku tuge raske korraldada. Allpool on superglobaalse massiivi $_SERVER kõige olulisemate elementide kirjeldus.

    Kommenteeri

    Massiivi $_SERVER elementide täielikku loendit saate vaadata kas funktsiooni print_r() abil, mis prindib massiivi väljavõtte, või funktsiooni phpinfo() abil, mis kuvab teavet PHP tõlgi kohta.

    Element $_SERVER["DOCUMENT_ROOT"]

    Element $_SERVER["DOCUMENT_ROOT"] sisaldab serveri juurkataloogi teed, kui skript käivitatakse virtuaalses hostis, määrab see element tee virtuaalse hosti juurkataloogi. Need. konfiguratsioonifailis httpd.conf on virtuaalsel hostil DocumentRoot direktiiv seatud väärtusele "D:/main", element $_SERVER["DOCUMENT_ROOT"] sisaldab väärtust "D:main".

    Element $_SERVER["HTTP_ACCEPT"]

    Element $_SERVER["HTTP_ACCEPT"] kirjeldab kliendi dokumenditüübi eelistusi. Selle elemendi sisu tuuakse välja Accept HTTP päisest, mille klient saadab serverisse. Selle päise sisu võib välja näha selline

    pilt/gif, pilt/x-xbitmap, pilt/jpeg, pilt/pjpeg, rakendus/x-shockwave-flash, rakendus/vnd.ms-excel, rakendus/msword, */*

    Nõustu päis võimaldab teil määrata meediumitüübi, mida klient eelistab vastuseks oma päringule saada. See päis annab serverile teada, et vastus on piiratud väikese hulga eelistatud tüüpidega.

    Sümbolit * kasutatakse meediumisarja tüüpide rühmitamiseks. Näiteks sümbol */* määrab kõigi tüüpide kasutamise ja tähise tüüp/* määrab valitud tüübitüübi kõigi alamtüüpide kasutamise.

    Kommenteeri

    Meediumitüübid eraldatakse komadega.

    Iga meediasarja iseloomustab ka täiendav parameetrite komplekt. Üks neist on nn suhtelise eelistuse koefitsient q, mis võtab väärtused vastavalt 0 kuni 1, vähem eelistatud tüüpidest eelistatumateni. Mitme q-parameetri kasutamine võimaldab kliendil öelda serverile oma suhtelise eelistuse teatud meediumitüübi suhtes.

    Kommenteeri

    Vaikimisi on q parameeter 1. Samuti eraldatakse see meediumitüübist semikooloniga.

    Nõustu päise näide:

    Nõustu: audio/*; q = 0,2, heli/põhiline

    Selles päises on esimene tüüp audio/*, mis hõlmab kõiki muusikalisi dokumente ja mida iseloomustab eelistustegur 0,2. Komaga eraldatuna näidatakse heli/põhitüüpi, mille eelistustegur on määramata ja võtab vaikeväärtuse ühe. Tsiteerides RFC2616, saab seda pealkirja tõlgendada järgmiselt: "Ma eelistan heli/põhitüüpi, kuid võin saata ka mis tahes muud helitüüpi dokumente, kui see on saadaval, pärast eelistusteguri vähendamist rohkem kui 80% võrra."

    Näide võib olla keerulisem.

    Aktsepteeri: tekst/tavaline; q=0,5, tekst/html,
    text/x-dvi; q=0,8, tekst/x-c

    Kommenteeri

    Pange tähele, et element $_SERVER["HTTP_ACCEPT"] sisaldab täpselt sama teavet, kuid ilma esialgse Accept päiseta.

    Seda päist tõlgendatakse järgmiselt: Eelistatud on dokumenditüübid text/html ja text/x-c, kuid kui need pole saadaval, eelistab selle päringu teinud klient text/x-dvi ja kui see pole saadaval, võib ta nõustuda tüüp text/plain

    Element $_SERVER["HTTP_ACCEPT_LANGUAGE"]

    Element $_SERVER["HTTP_ACCEPT_LANGUAGE"] kirjeldab kliendi keele-eelistusi. See teave ekstraheeritakse Accept-Language HTTP päisest, mille klient saadab serverisse. Võib tuua järgmise näite:

    Aktsepteeri keel: ru, en; q = 0,7

    Mida võib tõlgendada nii: klient eelistab vene keelt, kuid kui see pole saadaval, on ta nõus ingliskeelseid dokumente vastu võtma. Element $_SERVER["HTTP_ACCEPT_LANGUAGE"] sisaldab täpselt sama teavet, kuid ilma päise Accept-Languageta:

    ru, en; q = 0,7

    Elemendi $_SERVER["HTTP_ACCEPT_LANGUAGE"] sisu saab kasutada külastajate rahvuse määramiseks. Tulemused on siiski ligikaudsed, kuna paljud kasutajad kasutavad brauserite ingliskeelseid versioone, mis annavad serverile teada, et külastaja eelistab ainult ühte keelt - inglise keelt.

    Element $_SERVER["HTTP_HOST"]

    Element $_SERVER["HTTP_HOST"] sisaldab serveri nime, mis tavaliselt ühtib serveris asuva saidi domeeninimega. Tavaliselt on selles parameetris määratud nimi sama, mis nimi $_SERVER["SERVER_NAME"]. Parameeter sisaldab ainult domeeninime ilma protokolli nimeta (http://), st.

    www.sofftime.ru

    Element $_SERVER["HTTP_REFERER"]

    Element $_SERVER["HTTP_REFERER"] sisaldab selle lehe aadressi, kust külastaja sellele lehele tuli. Üleminek tuleb läbi viia lingi kaudu. Loome kaks lehekülge index.php ja page.php.

    index.php leht

    kaja "Link PHP lehele
    "
    ;
    kaja .
    $_SERVER["HTTP_REFERER"]
    ?>

    Leheküljel page.php on sarnane sisu, kuid link osutab lehele index.php.

    Lehekülg page.php

    kaja "Link PHP lehele
    "
    ;
    kaja "Sisu $_SERVER["HTTP_REFERER"] - ".
    $_SERVER["HTTP_REFERER"]
    ?>

    Ühelt lehelt teisele liikudes kuvatakse lingi all selle lehe aadress, millelt üleminek tehti.

    Element $_SERVER["HTTP_USER_AGENT"]

    Element $_SERVER["HTTP_USER_AGENT"] sisaldab teavet külastaja brauseri ja operatsioonisüsteemi tüübi ja versiooni kohta.

    Siin on selle rea tüüpiline sisu: "Mozilla/4.0 (ühildub; MSIE 6.0; Windows NT 5.1)". Alamstringi "MSIE 6.0" olemasolu näitab, et külastaja vaatab lehte Internet Exploreri versiooni 6.0 abil. Rida "Windows NT 5.1" näitab, et operatsioonisüsteemiks on Windows XP.

    Kommenteeri

    Windows 2000 puhul näeb element $_SERVER["HTTP_USER_AGENT"] välja selline: "Mozilla/4.0 (ühilduv; MSIE 5.01; Windows NT 5.0)"), Windows XP puhul näeb see välja nagu "Mozilla/4.0 (ühilduv; MSIE 6.0"). ;Windows NT 5.1)".

    Kui külastaja kasutab Opera brauserit, võib $_SERVER["HTTP_USER_AGENT"] sisu välja näha selline: "Mozilla/4.0 (ühilduv; MSIE 5.0; Windows 98) Opera 6.04". Siin on ka alamstring "MSIE 6.0", mis näitab, et Opera brauser ühildub Internet Exploreri brauseriga ja kasutab samu Windowsi dünaamilisi teeke. Seetõttu peaksite brauseri tagastatud stringi analüüsimisel meeles pidama, et Internet Explorer viitab stringile, mis sisaldab alamstringi "MSIE 6.0" ja ei sisalda alamstringi "Opera". Lisaks saame sellest reast järeldada, et kasutaja kasutab operatsioonisüsteemi Windows 98.

    Kommenteeri

    Firefoxi brauseri kasutajaagent võib välja näha selline: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5.

    Netscape'i brauserit kasutades võib elemendi $_SERVER["HTTP_USER_AGENT"] sisu välja näha järgmine: "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1" . Sellesse brauserisse kuulumise saab määrata alamstringi "Netscape" olemasolu järgi. Lisaks saate teada, et külastaja pääseb Internetti, kasutades Pentium IV jaoks optimeeritud tuumaga Linuxi töötavat versiooni, olles X-Window graafilises kestas. Seda mehhanismi on mugav kasutada statistilise teabe kogumiseks, mis võimaldab kujundajatel optimeerida lehti kõige tavalisemate brauserite jaoks.

    Element $_SERVER["REMOTE_ADDR"]

    Element $_SERVER["REMOTE_ADDR"] sisaldab kliendi IP-aadressi. Kohalikus masinas testimisel on see aadress 127.0.0.1. Võrgus testides tagastab muutuja aga kliendi IP-aadressi või viimase puhverserveri, mille kaudu klient serverisse jõudis. Kui klient kasutab puhverserverit, saate selle IP-aadressi teada keskkonnamuutuja HTTP_X_FORWARDED_FOR abil, mille väärtuse saab hankida funktsiooni getenv() abil.

    Kommenteeri

    Puhverserverid on spetsiaalsed vaheserverid, mis pakuvad spetsiaalset tüüpi teenust: liikluse tihendamine, andmete kodeerimine, kohandamine mobiilseadmete jaoks jne. Paljude puhverserverite hulgas on nn anonüümsed puhverserverid, mis võimaldavad varjata kliendi tegelikku IP-aadressi, sellised serverid ei tagasta HTTP_X_FORWARDED_FOR keskkonnamuutujat.

    Keskkonnamuutuja HTTP_X_FORWARDED_FOR toomine

    kaja getenv(HTTP_X_FORWARDED_FOR);
    ?>

    Element $_SERVER["SCRIPT_FILENAME"]

    Element $_SERVER["SCRIPT_FILENAME"] sisaldab kettajuurest faili absoluutset teed. Seega, kui serveris töötab Windowsi operatsioonisüsteem, võib see tee välja näha järgmine: “d:main estindex.php”, st. tee on määratud kettalt UNIX-i sarnases operatsioonisüsteemis, tee määratakse juurkataloogist /, näiteks "/var/share/www/test/index.php".

    Element $_SERVER["SERVER_NAME"]

    Element $_SERVER["SERVER_NAME"] sisaldab serveri nime, mis tavaliselt ühtib sellel asuva saidi domeeninimega. Näiteks,

    www.softtime.ru

    Elemendi $_SERVER["SERVER_NAME"] sisu on sageli sama, mis elemendi $_SERVER["HTTP_HOST"] sisu. Lisaks serveri nimele võimaldab superglobaalne massiiv $_SERVER teada saada mitmeid serveri parameetreid, näiteks serveri IP-aadressi, kuulamispordi, milline veebiserver on installitud ja HTTP-protokolli versiooni. See teave paigutatakse vastavalt elementidesse $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] ja $_SERVER["SERVER_PROTOCOL"]. Allpool on näide nende elementide kasutamisest.

    Massiivi $_SERVER elementide kasutamine

    echo "Serveri nimi - " . $_SERVER["SERVER_NAME"]. "
    " ;
    kaja "Serveri IP-aadress -". $_SERVER["SERVER_ADDR"]. "
    " ;
    kaja "Serveri port - " . $_SERVER["SERVER_PORT"]. "
    " ;
    kaja "Veebiserver - " . $_SERVER["SERVER_TARKVARA"]. "
    " ;
    kaja "HTTP protokolli versioon -". $_SERVER["SERVER_PROTOCOL"]. "
    " ;
    ?>

    Element $_SERVER["REQUEST_METHOD"]

    Element $_SERVER["REQUEST_METHOD"] sisaldab päringumeetodit, mida kasutatakse skripti kutsumiseks: GET või POST.