Walang kasalanan na server php. Global array $_SERVER sa PHP. Ginagamit namin ang built-in na server

Naka-block ang JavaScript sa iyong browser. Mangyaring paganahin ang JavaScript para gumana ang site!

Superglobal array $_SERVER

Upang array $_SERVER Inilalagay ng interpreter ng PHP ang mga variable na natanggap mula sa server. Kung wala ang mga variable na ito, mahirap ayusin ang buong suporta para sa mga Web application. Nasa ibaba ang isang paglalarawan ng pinakamahalagang elemento ng superglobal array $_SERVER.

Magkomento

  • Tingnan ang kumpletong listahan ng $_SERVER array elements
  • maaari mong gamitin ang print_r() function, na nagpi-print ng array dump, o gamit ang phpinfo() function, na nagpapakita ng impormasyon tungkol sa PHP interpreter.

    Array ( => sa => 200 => sa => htmlweb.ru => https => 443 => malapit => Mozilla/5.0 (tugma; 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"]

    Ang elementong $_SERVER["DOCUMENT_ROOT"] ay naglalaman ng path sa root directory ng server; Yung. sa httpd.conf configuration file, ang virtual host ay mayroong DocumentRoot directive na nakatakda sa "D:/main", ang $_SERVER["DOCUMENT_ROOT"] na elemento ay maglalaman ng value na "D:main".

    $_SERVER[" REMOTE_ADDR"]

    Ang elementong $_SERVER["REMOTE_ADDR"] ay naglalaman ng IP address ng kliyente. Kapag sumusubok sa isang lokal na makina, ang address na ito ay magiging katumbas ng 127.0.0.1. Gayunpaman, kapag sinusubukan sa network, ibabalik ng variable ang IP address ng kliyente o ang huling proxy server kung saan naabot ng kliyente ang server. Kung ang kliyente ay gumagamit ng proxy server, maaari mong malaman ang IP address nito gamit ang HTTP_X_FORWARDED_FOR environment variable, ang halaga nito ay maaaring makuha gamit ang getenv() function.

    Magkomento

    Ang mga proxy server ay mga espesyal na intermediate server na nagbibigay ng isang espesyal na uri ng serbisyo: traffic compression, data encoding, adaptation para sa mga mobile device, atbp. Sa maraming proxy server, mayroong tinatawag na anonymous proxy server, na nagbibigay-daan sa iyong itago ang tunay na IP address ng kliyente ay hindi nagbabalik ng HTTP_X_FORWARDED_FOR environment variable.

    Pagkuha ng variable ng kapaligiran HTTP_X_FORWARDED_FOR

    echo @getenv(HTTP_X_FORWARDED_FOR);

    $_SERVER[" SCRIPT_FILENAME"]

    Ang elementong $_SERVER["SCRIPT_FILENAME"] ay naglalaman ng ganap na landas patungo sa file mula sa disk root. Kaya, kung ang server ay nagpapatakbo ng Windows operating system, ang landas na ito ay maaaring magmukhang ganito: "d:main estindex.php", i.e. ang path ay tinukoy mula sa disk; sa isang UNIX-tulad ng operating system, ang landas ay tinukoy mula sa root directory /, halimbawa "/var/share/www/test/index.php".

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

    $_SERVER[" SERVER_NAME"]

    Ang elementong $_SERVER["SERVER_NAME"] ay naglalaman ng pangalan ng server, na karaniwang tumutugma sa domain name ng site na matatagpuan dito. Halimbawa,

    Ang nilalaman ng elementong $_SERVER["SERVER_NAME"] ay kadalasang pareho sa nilalaman ng elementong $_SERVER["HTTP_HOST"]. Bilang karagdagan sa pangalan ng server, binibigyang-daan ka ng superglobal array na $_SERVER na malaman ang isang bilang ng mga parameter ng server, halimbawa, ang IP address ng server, ang listening port, kung saan naka-install ang Web server at ang bersyon ng HTTP protocol. Ang impormasyong ito ay inilalagay sa mga elementong $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"], at $_SERVER["SERVER_PROTOCOL"], ayon sa pagkakabanggit. Nasa ibaba ang isang halimbawa gamit ang mga elementong ito.

    Gamit ang $_SERVER Array Elements

    echo "Ang pangalan ng server ay ".$_SERVER["SERVER_NAME"]."
    "; echo "Ang IP address ng server ay ".$_SERVER["SERVER_ADDR"]."
    "; echo "Server port - ".$_SERVER["SERVER_PORT"]."
    "; echo "Web server - ".$_SERVER["SERVER_SOFTWARE"]."
    "; echo "Bersyon ng HTTP protocol - ".$_SERVER["SERVER_PROTOCOL"]."
    ";

    Pangalan ng server - site
    IP address ng server - 185.12.92.137
    Port ng server - 80
    Web server - Apache/2.4.25 (Debian) mpm-itk/2.4.7-04 OpenSSL/1.0.2l
    Bersyon ng HTTP protocol - HTTP/1.0

    $_SERVER[" REQUEST_METHOD"]

    Ang elementong $_SERVER["REQUEST_METHOD"] ay naglalaman ng paraan ng kahilingan na ginagamit para tawagan ang script: GET o POST.

    Echo $_SERVER["REQUEST_METHOD"];

    $_SERVER[" QUERY_STRING"]

    Ang elementong $_SERVER["QUERY_STRING"] ay naglalaman ng mga parameter na ipinasa sa script kung ang string ng query ay isang address

    Halimbawa, kapag ina-access ang:
    ang elementong $_SERVER["QUERY_STRING"] ay maglalaman ng lahat ng teksto pagkatapos ng "?"

    Echo $_SERVER["QUERY_STRING"];

    id=1&test=wet&id_theme=512

    $_SERVER[" PHP_SELF"]

    Ang elementong $_SERVER["PHP_SELF"] ay naglalaman ng pangalan ng script, simula sa root directory ng virtual host, i.e. kung ang query string ay isang address http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 pagkatapos ang elementong $_SERVER["PHP_SELF"] ay maglalaman ng fragment "/test/index.php". Karaniwan, ang parehong fragment ay inilalagay sa elementong $_SERVER["SCRIPT_NAME"].

    $_SERVER[" REQUEST_URI"]

    Ang elementong $_SERVER["REQUEST_URI"] ay naglalaman ng pangalan ng script, simula sa root directory ng virtual host at mga parameter, i.e. kung ang query string ay isang address: http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 pagkatapos ang elementong $_SERVER["REQUEST_URI"] ay maglalaman ng fragment "/test/index.php?id=1&test=wet&id_theme=512". Upang maibalik ang buong address sa script, na inilagay sa linya ng query, sapat na gamitin ang kumbinasyon ng mga elemento ng $_SERVER array na ipinakita sa ibaba

    Buong address sa script

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

    At ito ang aktwal na ginamit ng kliyente bilang "target host" ng kahilingan. Ang SERVER_NAME ay tinukoy sa configuration ng server. Alin ang depende sa kung ano ang kailangan mo. Ngayon ay dapat mong maunawaan na ito ay isang kinokontrol na halaga ng kliyente na kung saan ay hindi maaasahan para sa paggamit sa lohika ng negosyo at ang isa ay isang halaga na kinokontrol ng server na mas maaasahan. Gayunpaman, kailangan mong tiyakin na ang web server ay may tamang configuration ng SERVER_NAME. Ang pagkuha ng Apache HTTPD bilang isang halimbawa, narito ang isang sipi mula sa dokumentasyon nito:

    Kung hindi tinukoy ang ServerName, susubukan ng server na ipahiwatig ang hostname sa pamamagitan ng pagsasagawa ng reverse lookup sa IP address. Kung walang port na tinukoy sa ServerName , gagamitin ng server ang port mula sa papasok na kahilingan. Para sa pinakamainam na pagiging maaasahan at predictability, dapat kang tumukoy ng isang tahasang hostname at port gamit ang ServerName na direktiba.

    Update: Pagkatapos suriin ang sagot ni Pekka sa iyong tanong, na naglalaman ng isang link sa sagot ni bobince, palaging ibabalik ng PHP na iyon ang halaga ng HTTP_HOST para sa SERVER_NAME, na sumasalungat sa sarili kong karanasan sa PHP 4.x + Apache HTTPD 1.2.x mula sa ilang taon na ang nakakaraan. , pinalabas ko ang alikabok sa aking kasalukuyang XAMPP sa Windows XP (Apache HTTPD 2.2.1 na may PHP 5.2.8), pinatakbo ito, lumikha ng isang pahina ng PHP na nagpi-print ng parehong mga halaga, lumikha ng isang pagsubok na Java application gamit ang URLConnection upang baguhin ang header ng Host, at ang mga pagsubok ay nagturo sa akin na ito ay talagang (mali) ang kaso.

    Matapos ang unang paghihinala sa PHP at paghuhukay sa ilan Mga ulat ng error sa PHP patungkol sa paksa, nalaman ko na ang ugat ng problema ay nasa web server na ginagamit, na mali nitong ibinabalik ang header ng HTTP Host noong hiniling ang SERVER_NAME. Kaya hinukay ko Mga ulat ng error sa Apache HTTPD gamit iba't ibang mga keyword medyo paksa at sa wakas ay natagpuan ko ang kaugnay na error. Ang pag-uugali na ito ay ipinakilala mula noong Apache HTTPD 1.3. Kailangan mong itakda ang UseCanonicalName na direktiba sa entry ServerName sa httpd.conf (tingnan din ang babala sa ibaba ng dokumento!).

    ServerName example.com Gamitin angCanonicalName sa

    Ito ay nagtrabaho para sa akin.

    Sa pangkalahatan, mas maaasahan ang SERVER_NAME, ngunit ikaw umaasa sa configuration ng server!

    Ang HTTP_HOST ay ang target na host na ipinadala ng kliyente. Malayang manipulahin ng user ang user. Hindi na kailangang magpadala ng kahilingan sa iyong site na humihingi ng HTTP_HOST na halaga ng www.stackoverflow.com.

    Ang SERVER_NAME ay nagmula sa kahulugan ng server ng VirtualHost at samakatuwid ay itinuturing na mas maaasahan. Maaari din itong manipulahin sa labas sa ilalim ng ilang partikular na kundisyon na nauugnay sa setup ng iyong web server. Tingnan mo ito SOBRANG tanong na ito, na tumutugon sa mga aspeto ng seguridad ng parehong mga opsyon.

    Hindi ka dapat umasa dito para maging ligtas. Gayunpaman, kung alin ang gagamitin ay talagang depende sa kung ano ang gusto mong gawin. Kung gusto mong matukoy kung saang domain tumatakbo ang iyong script, ligtas mong magagamit ang HTTP_HOST hangga't ang mga di-wastong halaga na nagmumula sa isang umaatake ay hindi makakasira ng anuman.

    Tandaan na kung gusto mong gumamit ng IPv6, malamang na gugustuhin mong gumamit ng HTTP_HOST kaysa sa SERVER_NAME. Kung ilalagay mo ang http://[::1]/ , ang mga variable ng kapaligiran ay magiging tulad ng sumusunod:

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

    Nangangahulugan ito na kung gagawin mo ang mod_rewrite, halimbawa, maaari kang makakuha ng mga pangit na resulta. Halimbawa ng pag-redirect ng SSL:

    HINDI gagana ang # SERVER_NAME - Redirection sa https://::1/ RewriteRule .* https://%(SERVER_NAME)/ # HTTP_HOST will work - Redirection to https://[::1]/ RewriteRule .* https: //%(HTTP_HOST)/

    Nalalapat LAMANG ito kung ina-access mo ang server nang walang hostname.

    kung gusto mong suriin sa pamamagitan ng server.php o anumang nais mong tawagan gamit ang sumusunod:

    Pagkatapos ay i-access ang lahat ng wastong URL para sa iyong site at subukan ang pagkakaiba.

    Nagtagal ako bago maunawaan kung ano ang ibig sabihin ng mga tao sa "SERVER_NAME ay mas maaasahan." Gumagamit ako ng shared server at walang access sa mga virtual host directive. Kaya gumagamit ako ng mod_rewrite sa .htaccess para mag-map ng iba't ibang HTTP_HOST sa iba't ibang direktoryo. Sa kasong ito, ang halaga ng HTTP_HOST na ito ay may katuturan.

    Ang sitwasyon ay katulad kung gumagamit ka ng name-based na virtual host: ang ServerName directive sa loob ng virtual host ay nagsasabi lang sa iyo kung anong hostname ang imamapa sa virtual host na iyon. Ang bottom line ay na sa parehong mga kaso, ang hostname na ibinigay ng kliyente sa oras ng kahilingan (HTTP_HOST) ay dapat tumugma sa pangalan sa server, na mismong nakamapa sa direktoryo. Kung ang pagmamapa ay ginawa laban sa mga virtual na direktiba ng host o laban sa htaccess mod_rewrite na mga panuntunan ay pangalawa rito. Sa mga kasong ito, ang HTTP_HOST ay magiging kapareho ng SERVER_NAME. Natutuwa akong naka-configure ang Apache sa ganitong paraan.

    Gayunpaman, iba ang sitwasyon para sa mga IP-based na virtual host. Sa kasong ito at sa kasong ito lamang, maaaring magkaiba ang SERVER_NAME at HTTP_HOST dahil pinipili na ngayon ng kliyente ang server sa pamamagitan ng IP, hindi sa pangalan.

    Sa katunayan, maaaring may mga espesyal na pagsasaayos kung saan ito ay mahalaga.

    Kaya mula ngayon, gagamitin ko ang SERVER_NAME kung sakaling ma-port ang aking code sa mga espesyal na configuration na ito.

    Ipagpalagay na mayroon kang isang simpleng setup (CentOS 7, Apache 2.4.x at PHP 5.6.20) at isang website lamang (hindi ipinapalagay na nakabahaging pagho-host)... Sa kahulugan ng PHP, ang $_SERVER["SERVER_NAME"] ay isang elemento ng PHP na nakarehistro sa superclass na $_SERVER batay sa iyong configuration ng Apache (**ServerName** na direktiba na may UseCanonicalName On) sa httpd.conf (mula man sa pinaganang configuration ng virtual host file, anuman, atbp.). HTTP_HOST

    hinuha mula sa header ng HTTP host. Isaalang-alang ito bilang input ng user. Salain at suriin bago gamitin.

    Narito ang isang halimbawa kung saan ginagamit ko ang $_SERVER["SERVER_NAME"] bilang batayan para sa paghahambing. Ang sumusunod na pamamaraan ay nasa isang partikular na klase ng bata na tinawag kong ServerValidator (anak ng Validator). Sinusuri ng ServerValidator ang anim o pitong elemento sa $_SERVER bago gamitin ang mga ito.

    Ang pampublikong function ayPOST() ( return (($this->requestMethod === "POST") && // Balewala ang $this->hasTokenTimeLeft() && // Balewala $this->hasSameGETandPOSTIdentities() && // Ingore ($this ->httpHost === filter_input(INPUT_SERVER, "SERVER_NAME")));

    Sa oras na tinawag ang pamamaraang ito, ang lahat ng pag-filter at pagpapatunay ng mga katumbas na elemento ng $_SERVER (at mga kaukulang set ng property) ay magagawa na.

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

    Bine-verify na ang halaga ng $_SERVER["HTTP_HOST"] (sa huli ay nakuha mula sa hiniling na HTTP host header) ay tumutugma sa $_SERVER["SERVER_NAME"] .

    Ngayon ay gumagamit ako ng superglobal talk upang ipaliwanag ang aking halimbawa, ngunit iyon ay dahil ang ilang mga tao ay hindi pamilyar sa INPUT_GET , INPUT_POST at INPUT_SERVER na may kaugnayan sa filter_input_array() .

    Ang bottom line ay hindi ko pinoproseso ang mga kahilingan sa POST sa aking server maliban kung natutugunan ang lahat ng apat na kundisyon. Kaya, sa mga tuntunin ng mga kahilingan sa POST, ang pagkabigo na magbigay ng HTTP host header (presence checked para sa mas maaga) doom spells para sa mahigpit na mga browser HTTP 1.0. Bilang karagdagan, ang hiniling na host ay dapat tumugma sa halaga Pangalan ng Server sa httpd.conf, at ayon sa extension - ang halaga na $_SERVER("SERVER_NAME") sa $_SERVER supermaclon. Muli, gagamit ako ng INPUT_SERVER sa mga function ng filter ng PHP, ngunit sinira mo ang aking drift.

    Gaya ng sinabi ng balusC, ang SERVER_NAME ay hindi maaasahan at maaaring baguhin sa apache config, server server config at firewall na maaaring nasa pagitan mo at ng server.

    Ang sumusunod na function ay palaging ibinabalik ang tunay na host (custom typed host) nang walang port, at ito ay halos walang palya:

    Function getRealHost())( list($realHost,)=explode(":",$_SERVER["HTTP_HOST"]); ibalik ang $realHost; )

    ibahagi

    Una, pagbubutihin namin ang pahina ng pagpaparehistro sa pamamagitan ng pagdaragdag ng kakayahang mag-upload ng avatar. Ang pinagmulang larawan ay dapat nasa jpg, gif o png na format. Dapat din itong hindi hihigit sa 2 MB. Huwag mag-alala, pagkatapos itong ma-compress ng script, ang laki ng avatar ay magiging mga 3 kb at jpg na format. Buksan ang pahina reg.php at idagdag ito sa tag < anyo> linya enctype="multipart/form-data", tulad ng sa halimbawa:


    Pagpaparehistro










    Ngayon mag-ipon tayo reg.php

    2. Pagkatapos ay kailangan mong lumikha ng isa pang field sa talahanayan mga gumagamit. Tara na sa phpmyadmin, piliin ang nais na database at talahanayan.


    Itinakda namin ang lahat ng mga halaga tulad ng sa figure:

    Ang landas patungo sa avatar ay itatala sa field na ito, at ito ay ise-save sa isang hiwalay na folder, tawagin natin itong "mga avatar". Ang folder ay matatagpuan sa parehong direktoryo tulad ng iba pang mga script file.

    3.Pumunta sa file iligtas_ gumagamit. php at idagdag ang sumusunod na code pagkatapos alisin ang mga puwang mula sa pag-login at password:

    //alisin ang mga karagdagang espasyo
    $login = trim($login);

    // magdagdag ng bagong ********************************************

    //magdagdag ng tseke para sa haba ng login at password
    kung (strlen($login)< 3 or strlen($login) > 15) {
    exit("Ang pag-login ay dapat na binubuo ng hindi bababa sa 3 character at hindi hihigit sa 15.");
    }
    kung (strlen($password)< 3 or strlen($password) > 15) {
    exit("Ang password ay dapat na hindi bababa sa 3 character at hindi hihigit sa 15.");
    }

    kung (!empty($_POST["fupload"])) //suriin kung naipadala ng user ang larawan
    {
    $fupload=$_POST["fupload"]; $fupload = trim ($fupload);
    kung ($fupload =="" o walang laman($fupload)) (
    unset($fupload);// kung ang $fupload variable ay walang laman, pagkatapos ay tanggalin ito
    }
    }
    kung (!isset($fupload) o walang laman($fupload) o $fupload =="")
    {
    //kung ang variable ay hindi umiiral (ang user ay hindi nagpadala ng isang imahe), pagkatapos ay italaga ito ng isang pre-prepared na larawan na may inskripsyon na "walang avatar"
    $avatar = "avatars/net-avatara.jpg"; //maaari kang gumuhit ng net-avatara.jpg o kunin ito mula sa pinagmulan
    }
    iba pa
    {
    //kung hindi man - i-load ang larawan ng user
    $path_to_90_directory = "avatars/";//folder kung saan ilo-load ang unang larawan at ang naka-compress na kopya nito

    If(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["fupload"]["pangalan"])) //pagsusuri sa format ng pinagmulang larawan
    {
    $filename = $_FILES["fupload"]["name"];
    $source = $_FILES["fupload"]["tmp_name"];
    $target = $path_to_90_directory . $filename;
    move_uploaded_file ($source, $target);//pag-upload ng orihinal sa folder na $path_to_90_directory
    if(preg_match("/[.](GIF)|(gif)$/", $filename)) (
    $im = imagecreatefromgif($path_to_90_directory.$filename) ; //kung ang orihinal ay nasa gif na format, pagkatapos ay lumikha ng isang imahe sa parehong format. Kinakailangan para sa kasunod na compression
    }
    if(preg_match("/[.](PNG)|(png)$/", $filename)) (
    $im = imagecreatefrompng($path_to_90_directory.$filename) ;//kung ang orihinal ay nasa png na format, pagkatapos ay gawin ang larawan sa parehong format. Kinakailangan para sa kasunod na compression
    }

    If(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $filename)) (
    $im = imagecreatefromjpeg($path_to_90_directory.$filename); //kung ang orihinal ay nasa jpg na format, pagkatapos ay lumikha ng isang imahe sa parehong format. Kinakailangan para sa kasunod na compression
    }
    //PAGLIKHA NG ISANG SQUARE IMAGE AT ANG KASUNOD NA COMPRESSION NITO NA KINUHA MULA SA SITE www.codenet.ru
    // Lumikha ng 90x90 square
    // dest - ang nagresultang imahe
    // w - lapad ng larawan
    // ratio - koepisyent ng proporsyonalidad
    $w = 90; // parisukat 90x90. Maaaring ibigay sa iba pang laki.
    // lumikha ng orihinal na imahe batay sa
    // source file at tukuyin ang laki nito
    $w_src = imagesx($im); //kalkulahin ang lapad
    $h_src = imagesy($im); //kalkulahin ang taas ng imahe
    // lumikha ng walang laman na parisukat na imahe
    // truecolor ay mahalaga!, kung hindi, magkakaroon tayo ng 8-bit na resulta
    $dest = imagecreatetruecolor($w,$w);
    // gupitin ang square center kasama ang x kung pahalang ang larawan
    kung ($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));
    // gupitin ang parisukat na tuktok sa kahabaan ng y,
    // kung patayo ang larawan (bagaman maaari mo ring gamitin ang gitna)
    kung ($w_src<$h_src)
    imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
    min($w_src,$h_src), min($w_src,$h_src));
    // ang parisukat na imahe ay naka-scale nang walang clipping
    kung ($w_src==$h_src)
    imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
    $date=time(); //kalkulahin ang kasalukuyang oras.
    imagejpeg($dest, $path_to_90_directory.$date.".jpg");//i-save ang larawan sa jpg na format sa nais na folder, ang pangalan ay ang kasalukuyang oras. Ginawa upang pigilan ang mga avatar na magkaroon ng parehong mga pangalan.
    //bakit jpg? Ito ay tumatagal ng napakaliit na espasyo + ang animation ng GIF na imahe, na nakakagambala sa gumagamit, ay nawasak. Hindi masyadong kaaya-aya basahin ang kanyang komento kapag may napansin kang paggalaw sa gilid ng iyong mata.
    $avatar = $path_to_90_directory.$date.".jpg";//ilagay ang path sa avatar sa variable.
    $delfull = $path_to_90_directory.$filename;
    i-unlink ($delfull);//tanggalin ang orihinal na na-upload na larawan, hindi na namin ito kailangan. Ang gawain ay upang makakuha ng isang miniature.
    }
    iba pa
    {
    //sa kaso ng hindi pagkakatugma ng format, mag-isyu ng kaukulang mensahe
    exit("Dapat nasa format ang avatar JPG, GIF o PNG");
    }
    //pagtatapos ng proseso ng paglo-load at pagtatalaga sa $avatar variable ang address ng na-load na ava
    }



    // nagdagdag ng bagong *********************************************** **
    // Susunod na darating ang lahat mula sa unang bahagi ng artikulo, ngunit kailangan mong magdagdag ng pagbabago sa query sa database.
    //kunekta sa database
    // suriin ang pagkakaroon ng user na may parehong login
    $result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
    kung (!empty($myrow["id"])) (
    exit("Paumanhin, ang login na iyong ipinasok ay nakarehistro na. Mangyaring magpasok ng isa pang login.");
    }
    // kung hindi ito ang kaso, pagkatapos ay i-save ang data
    $result2 = mysql_query("INSERT INTO users (login,password,avatar) VALUES("$login","$password","$avatar")");
    // Suriin kung may mga error
    kung ($result2=="TRUE")
    {
    echo "Matagumpay kang nakarehistro! Ngayon ay maaari ka nang pumasok sa site. Home page";
    }
    iba pa(
    echo "Error! Hindi ka nakarehistro.";
    }
    ?>

    4. Kailangan mong magdagdag ng isang talahanayan sa parehong database. Mag-iimbak ito ng mga IP address na nagkamali kapag nag-log in. Sa ganitong paraan maaari nating limitahan ang pag-access sa mga nagkamali nang higit sa tatlong beses na magkakasunod sa loob ng humigit-kumulang 15 minuto.
    Pumunta tayo sa phpmyadmin at gumawa ng bagong table na may 3 field:


    ip - IP address.
    petsa - petsa ng hindi matagumpay na pag-log in sa huling 15 minuto para sa user na may ganitong ip. col - ang bilang ng mga error sa nakalipas na 15 minuto para sa user na may ganitong ip.
    Mahusay! Tapos na, ngayon ay baguhin natin ang login at password verification file, dahil naka-encrypt na ngayon ang aming password. Buksan ang testreg.php at tanggalin ang lahat ng lampas sa pag-alis ng mga puwang mula sa login at password. Susunod, idagdag namin ang sumusunod na code:

    //alisin ang mga karagdagang espasyo
    $login = trim($login);
    $password = trim ($password);

    // palitan ng bago********************************************** *******
    // kumonekta sa database
    include("bd.php");// ang bd.php file ay dapat nasa parehong folder tulad ng lahat ng iba pa, kung hindi, palitan lang ang path
    // mini-check para sa pagpili ng password
    $ip=getenv("HTTP_X_FORWARDED_FOR");
    if (empty($ip) || $ip=="unknown") ( $ip=getenv("REMOTE_ADDR"); )//extract ip
    mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//delete ang mga IP address ng mga user na nag-log in nang hindi tama pagkatapos ng 15 minuto.
    $result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db); // kunin mula sa database ang bilang ng mga hindi matagumpay na pagsubok sa pag-log in sa huling 15 para sa isang user na may ibinigay na ip
    $myrow = mysql_fetch_array($result);
    kung ($myrow["col"] > 2) (
    //kung mayroong higit sa dalawang error, ibig sabihin, tatlo, pagkatapos ay maglalabas kami ng mensahe.
    exit("Maling naipasok mo ang iyong username o password nang 3 beses. Mangyaring maghintay ng 15 minuto bago subukang muli.");
    }
    $password = md5($password);//i-encrypt ang password
    $password = strrev($password);// para sa pagiging maaasahan, magdagdag ng reverse
    $password = $password."b3p6f";
    //maaari kang magdagdag ng ilan sa iyong sariling mga character sa iyong panlasa, halimbawa, sa pamamagitan ng pagpasok ng "b3p6f". Kung ang password na ito ay na-hack ng malupit na puwersa sa parehong md5 server, kung gayon ay malinaw na walang magandang mangyayari dito. Ngunit ipinapayo ko sa iyo na maglagay ng iba pang mga character, marahil sa simula ng linya o sa gitna.
    //Sa kasong ito, kinakailangan upang taasan ang haba ng field ng password sa database. Maaaring mas malaki ang naka-encrypt na password.

    $result = mysql_query("SELECT * FROM users WHERE login="$login" AND password="$password"",$db); //kunin mula sa database ang lahat ng data tungkol sa user na may inilagay na login at password
    $myrow = mysql_fetch_array($result);
    kung (walang laman($myrow["id")))
    {
    //kung ang user na may inilagay na login at password ay wala
    //Gumawa kami ng rekord na hindi maka-log in ang ip na ito.
    $select = mysql_query("SELECT ip FROM oshibka WHERE ip="$ip"");
    $tmp = mysql_fetch_row($select);
    if ($ip == $tmp) (//check kung ang user ay nasa table na "oshibka".
    $result52 = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db);
    $myrow52 = mysql_fetch_array($result52);
    $col = $myrow52 + 1;//magdagdag ng isa pang hindi matagumpay na pagsubok sa pag-log in
    mysql_query("I-UPDATE ang error SET col=$col,date=NOW() WHERE ip="$ip"");
    }
    iba pa(
    mysql_query("INSERT INTO oshibka (ip,date,col) VALUES ("$ip",NOW(),"1")");
    //kung walang mga error sa huling 15 minuto, pagkatapos ay magpasok ng bagong entry sa talahanayan ng "oshibka"
    }

    exit("Paumanhin, ang username o password na iyong inilagay ay hindi tama.");
    }
    iba pa(
    nbsp; //kung tumugma ang mga password, maglulunsad kami ng session para sa user! Maaari mo siyang batiin, nakapasok siya!
    $_SESSION["password"]=$myrow["password"];
    $_SESSION["login"]=$myrow["login"];
    $_SESSION["id"]=$myrow["id"];//ang data na ito ay madalas na ginagamit, kaya ang naka-log in na user ay "dalhin ito kasama niya"

    //Susunod ay ise-save namin ang data sa cookies para sa kasunod na pag-login.
    //PANSIN!!! GAWIN MO ITO AYON SA IYONG PAGPAPASYA DAHIL ANG DATA AY NA-INISOK SA COOKIES NA WALANG ENCRYPTION
    kung ($_POST["save"] == 1) (
    //Kung gusto ng user na ma-save ang kanyang data para sa kasunod na pag-login, ise-save namin ito sa cookies ng kanyang browser
    setcookie("login", $_POST["login"], oras()+9999999);
    setcookie("password", $_POST["password"], oras()+9999999);
    }}
    echo" "; // nire-redirect namin ang user sa pangunahing pahina, kung saan aabisuhan namin siya ng isang matagumpay na pag-log in
    ?>

    5. Ganap naming babaguhin ang pangunahing pahina. Kinakailangang ipakita ang avatar ng user dito, magpakita ng link para mag-log out sa account at magdagdag ng checkbox para matandaan ang password kapag nag-log in.
    Index.php

    // gumagana ang buong pamamaraan sa mga session. Ito ay kung saan naka-imbak ang data ng user habang siya ay nasa site. Napakahalaga na ilunsad ang mga ito sa pinakadulo simula ng pahina!!!
    session_start();
    include("bd.php");// ang bd.php file ay dapat nasa parehong folder tulad ng lahat ng iba pa, kung hindi, palitan lang ang path
    kung (!empty($_SESSION["login"]) at !empty($_SESSION["password"]))
    {
    //kung mayroong login at password sa mga session, pagkatapos ay suriin ang mga ito at kunin ang avatar
    $login = $_SESSION["login"];
    $password = $_SESSION["password"];
    $result = mysql_query("SELECT id,avatar FROM users WHERE login="$login" AND password="$password"",$db);
    $myrow = mysql_fetch_array($result);
    //extract ang kinakailangang data ng user
    }
    ?>


    Home page


    Home page

    kung (!isset($myrow["avatar"]) o $myrow["avatar"]=="") (
    //suriin kung ang data ng user ay nakuha mula sa database. Kung hindi, hindi siya naka-log in, o hindi tama ang password sa session. Nagpapakita kami ng window sa pag-login. Pero hindi namin ipapakita sa mga papasok, hindi na nila kailangan.
    print<<


    DITO;

    If (isset($_COOKIE["login"])) //may variable bang may login sa COOKIE. Dapat ay kung nag-click ang user sa checkbox na "Tandaan ako" sa nakaraang pag-login
    {
    //kung oo, pagkatapos ay ipasok ang halaga nito sa form. Sa kasong ito, ang gumagamit ay ipinapakita na ang kanyang pag-login ay naipasok na sa kinakailangang hanay
    echo " value="".$_COOKIE["login"]."">";
    }

    print<<




    DITO;

    Kung (isset($_COOKIE["password"]))//kung mayroong variable na may password sa COOKIE. Dapat ay kung nag-click ang user sa checkbox na "Tandaan ako" sa nakaraang pag-login
    {
    //kung oo, pagkatapos ay ipasok ang halaga nito sa form. Sa kasong ito, ang user ay ipinapakita na ang kanyang password ay naipasok na sa kinakailangang hanay
    echo " value="".$_COOKIE["password"]."">";
    }

    Print<<



    Tandaan mo ako.






    Magrehistro



    Naka-log in ka bilang bisita

    DITO;
    }
    iba pa
    {
    //kung matagumpay ang pag-log in, ibibigay sa user ang lahat sa ibaba sa pagitan ng mga asterisk.

    print<<
    Naka-log in ka sa site bilang $_SESSION (exit)


    Ang link na ito ay magagamit lamang sa mga rehistradong user

    Ang iyong avatar:




    DITO;

    //************************************************************************************
    //kung matagumpay ang pag-log in, ibibigay sa user ang lahat ng nasa ITAAS sa pagitan ng mga asterisk.
    }
    ?>



    6. Ito ay kinakailangan upang gawing posible para sa mga naka-log in na gumagamit na mag-log out. Mayroon nang isang link upang lumabas sa pangunahing pahina. Ngunit ang file na ito ay hindi pa umiiral. Kaya gumawa tayo ng bagong file exit.php may code:

    session_start();
    kung (walang laman($_SESSION["login")]) o walang laman($_SESSION["password"]))
    {
    //kung walang session na may login at password, ang file na ito ay na-access ng isang hindi naka-log in na user. Hindi siya bagay dito. Nag-isyu kami ng mensahe ng error at itinigil ang script
    exit ("Ang pag-access sa pahinang ito ay pinapayagan lamang sa mga rehistradong gumagamit. Kung ikaw ay nakarehistro, pagkatapos ay mag-log in sa site gamit ang iyong username at password
    Home page");
    }

    unset($_SESSION["password"]);
    unset($_SESSION["login"]);
    unset($_SESSION["id"]);// sirain ang mga variable sa mga session
    lumabas(" ");
    // ipadala ang user sa pangunahing pahina.
    ?>

    Well yun lang! Tangkilikin ito para sa iyong kalusugan! Good luck!

    • Pagsasalin
    • Tutorial

    Ang isa sa mga pinakaastig na inobasyon sa PHP 5.4 ay ang built-in na server, na partikular na nilikha para sa pagbuo at pagsubok. Maaari mo na ngayong isulat at subukan ang iyong code nang walang kumpletong web server - simulan lang ang built-in na server, subukan ang iyong code, at isara ito kapag tapos ka na.
    Nagbibigay din ang server ng pagkakataon para sa malikhaing paggamit. Halimbawa, maaari mong ipamahagi ang isang portable web application sa CD o USB, o kahit bilang isang desktop application na binuo sa PHP nang hindi gumagamit ng GTK o iba pang mga graphics library.

    Binibigyang-diin ng manual ng PHP na ang built-in na server ay inilaan para sa pag-unlad at inirerekumenda na huwag gamitin ito sa isang production server. Walang mga direktiba ng INI na responsable para sa server (maliban sa pagkulay ng output sa console), at tila ang pangunahing ideya ng dokumentasyon ay: "mayroon na rin kaming Web server, iwanan mo kami."
    Sa kabila nito, naniniwala ako na ang isang naka-embed na server ay maaaring maging isang mahalagang tool para sa pagbuo at pagsubok. Halimbawa, sa aking makina ay gumagamit ako ng Apache na paunang naka-install na may pasadyang pagsasaayos na nababagay sa akin, ngunit kung minsan ay gusto kong subukan ang ilang mga bagong Web application. Gamit ang isang built-in na web server, maaari kong subukan ang application nang direkta mula sa mga pag-download o pansamantalang folder at ilipat ito sa regular na kapaligiran lamang kapag kinakailangan.
    Ngunit sa simula, hindi ito gaanong simple, dahil maraming nakasulat na application ang gumagamit ng .htaccess at mod_rewrite. Ngunit sigurado akong may isang tao (maaaring isa sa inyo, bakit hindi?) ang magsusulat ng adaptor para dito, at gusto kong ako ang unang sumubok nito.
    Sa artikulong ito, ipapaliwanag ko ang ilang pangunahing paggamit ng naka-embed na server at ipapakita ko sa iyo kung paano ito gagawing kapaki-pakinabang para sa pagbuo at pagsubok.

    Ginagamit namin ang built-in na server

    Kaya, para magamit ang server kailangan namin ng php 5.4 o mas mataas. Upang suriin ang bersyon ng PHP, patakbuhin ang:
    php -v
    Maaari mo ring matukoy kung available ang server sa iyong build sa pamamagitan ng pagpapatakbo:
    php -h
    at hanapin doon ang isang paglalarawan ng "-S" at "-t" na mga parameter, na ginagamit lamang para sa server.
    Upang subukan ang server, maaari kang lumikha ng isang index.php file sa kasalukuyang direktoryo, na naglalaman ng isang tawag sa phpinfo() function at pagkatapos ay simulan ang server:
    $ php -S 127.0.0.1:8080 PHP 5.4.0RC7 Development Server ay nagsimula noong Biyernes Peb 26 18:49:29 2012 Pakikinig sa 127.0.0.1:8080 Ang root ng dokumento ay /home/ec2-user Pindutin ang Ctrl-C para umalis.
    At ngayon makikita mo ang mga nilalaman na ipinadala ng built-in na web server:

    Ang bawat kahilingan ng kliyente ay isusulat sa console:
    80.180.55.37:36318 : / 80.180.55.37:36584 : /
    Bumalik, tingnan natin ang parameter ng command line na "-S", na ginagamit upang tukuyin ang address kung saan maa-access ang server. Mga posibleng halaga:
    localhost- ang server ay maa-access lamang mula sa lokal na makina,
    0.0.0.0 - sa anumang interface ng makina,
    Anumang panlabas o kulay abong IP- lamang sa tinukoy na IP
    Itinatakda ng opsyong "-t" ang tinukoy na direktoryo sa "ugat ng direktoryo". Halimbawa:
    $php -S :8090 -t /home/ec2-user/public
    Bukod,. maaari mong tukuyin ang pangalan ng isang partikular na file ng router. Halimbawa:
    $ php -S >localhost o ang iyong pampublikong IP>:8080 -t /home/ec2-user/public public/index.php
    Ang output ng router na ito ay ipapa-parse at isasagawa ng server. Simpleng halimbawa:
    Maligayang pagdating sa PHP

    ";
    Kung ang script ay nagbabalik ng FALSE, ang hiniling na URI ay ipoproseso ng server, na magbabalik ng hiniling na mapagkukunan o magbabalik ng 404 na error. Kung ang script ay nagbabalik ng anupaman, ang output ng script ay ipapasa sa kliyente.
    Bagama't ang diskarteng ito ay nagbibigay sa amin ng higit na kontrol, may ilang bagay na dapat mong malaman. Una, ang PHP server ay nagbibigay lamang ng isang minimum na hanay ng mga header ng HTTP:
    Koneksyon: sarado Uri ng Nilalaman: text/html Host: aws-dev-01.vtardia.com X-Powered-By: PHP/5.4.0RC7 D
    Ihambing ito sa mga header na ibinalik ng Apache server:
    Accept-Ranges: bytes Koneksyon: Keep-Alive Content-Length: 631 Content-Type: text/html Date: Sab, 04 Feb 2012 18:24:42 GMT Etag: "bbb99-277-4ace8c5470a40" Keep-Alive: timeout= 15, max=100 Huling Binago: Miy, 14 Set 2011 15:54:09 GMT Server: Apache/2.2.21 (Unix) DAV/2
    Kung gumagamit ang iyong application ng mga header, dapat itong isaalang-alang ang pagkakaiba sa kapaligiran ng pag-unlad at sa produksyon.
    Pangalawa, ang built-in na server ay may ibang SAPI (Server API). Kaya, sa pamamagitan ng pagsasagawa ng routing sa index, php, matutukoy mo kung ang script ay ina-access sa isang pagsubok o production server. Ang php_sapi_name() ay magbabalik ng "cli-server" sa built-in na server:
    Mayroong isang espesyal na direktiba ng INI - "cli_server.color". Ang direktiba na ito ay nagbabalik ng may kulay na output sa console. Lumikha ng isang walang laman na file na pinangalanan cli-server.ini at i-paste ang linyang ito:
    cli_server.color = on
    Maaari kang lumikha ng isang natatanging configuration ng kapaligiran para sa iyong server sa pamamagitan ng pagtukoy ng mga kinakailangang direktiba sa iyong INI file. Ang mga direktiba na hindi idineklara ay kukuha sa kanilang mga default na halaga. Ngayon ay nagdeklara na lamang kami ng isang direktiba - cli_server.color.
    Simulan ang server gamit ang parameter na "-c" na tumutukoy sa INI file:
    $ php -S localhost -c cli-server.ini
    Kung sinusuportahan ng iyong terminal ang mga kulay, makikita mo ang "kulay" na output sa console. Ang 200 na katayuan ay iha-highlight sa berde, ang 404 na katayuan ay iha-highlight sa orange, at ang mga error sa script ay iha-highlight sa pula.

    Paglikha ng isang personal na server

    Ngayong alam mo na ang lahat ng dapat malaman tungkol sa naka-embed na server, gumawa tayo ng isang bagay na cool. Gumawa tayo ng sarili nating portable server!
    Magsisimula ako sa sumusunod na istraktura para sa aming aplikasyon:

    Ang folder na "library" ay naglalaman ng code ng aplikasyon, "pampubliko" ang root directory, naglalaman ng index.php at ilang mga static na file. Ang partikular na atensyon sa tutorial na ito ay ibibigay sa folder na "server", at sa gayon ang aming application ay bubuo ng isang simpleng "Hello Word!" at ilang mga larawan at css.
    Ang aming layunin ay masimulan ang server mula sa direktoryo ng application gamit ang isang utos, at ang aming server ang bahala sa pagruruta, mga header ng HTTP at mga error.
    $./start.sh
    Tingnan natin ang script ng startup:
    #! /bin/bash INIFILE="$(pwd)/server/server.ini" DOCROOT="$(pwd)/public" ROUTER="$(pwd)/server/router.php" HOST=0.0.0.0 PORT=8080 PHP=$(aling php) kung [ $? != 0 ] ; pagkatapos ay echo "Hindi mahanap ang PHP" exit 1 fi $PHP -S $HOST:$PORT -c $INIFILE -t $DOCROOT $ROUTER
    Ipinapalagay ko na ang script ay pinapatakbo mula sa direktoryo ng aplikasyon, kaya ang INIFILE, DOCROOT, ROUTER ay tinukoy gamit ang pwd. Ang path sa php ay tinutukoy gamit ang command na aling. Kung hindi natagpuan ang php sa $PATH ng user, mabibigo ang script.
    Ito ay gumagana nang maayos, ngunit bigyan natin ang user ng kakayahang baguhin ang alinman sa mga ibinigay na parameter mula sa command line, halimbawa:
    kung [! -z $INIFILE ]; pagkatapos ay INIFILE="$(pwd)/server/server.ini" fi
    Magpatuloy tayo, ang folder na “errors” ay naglalaman ng mga file para sa mga mensahe ng error sa HTTP. Narito ang isang halimbawa tungkol sa isang 403 error: kahit na ginamit ko lamang ang HTML, ang script ay konektado, ginagamit ko isama para magamit mo ang anumang php code:
    403

    403: Ipinagbabawal

    Paumanhin, hindi naa-access ang hiniling na mapagkukunan.



    Ngayon tingnan natin ang router.php. Ang layunin ng file na ito ay upang matanggap at pamahalaan ang lahat ng mga kahilingan at ipadala ang mga ito sa server lamang kung umiiral ang file na ito. Ang lahat ng mga pahina ng error ay ipinapakita sa pamamagitan ng pagkonekta ng isang template.
    Sa mga unang linya ay tinukoy ko ang ilang pandaigdigang parameter, tulad ng DIRECTORY_INDEX, ang direktoryo na may mga template ng error. Dapat tumugma ang parameter na date_default_timezone_set() sa mga setting ng OS, kung hindi, magkakaroon ng mga hindi pagkakapare-pareho sa pagitan ng mga entry sa log at sa server. Nagdagdag din ako ng listahan ng mga pinapayagang IP address para mapataas ang seguridad.
    Ang logAccess() function ay kinakailangan dahil kapag ang routing script ay nakatanggap ng kahilingan, ang server log ay binabalewala bilang default. Ang function ay tumatanggap lamang ng isang status code, at ang format ng output ay ganap na tumutugma sa format ng server.
    Ang aming unang gawain ay isang security check. Kung ang IP ng kliyente ay wala sa hanay ng mga pinapayagang IP, nagpapakita kami ng mensahe ng error at tinatapos ang script. Kailangan naming magbigay ng status code maliban sa 200 at ang header() function ay hindi gagana dito, kaya gumagamit kami ng bagong function - http_response_code.
    Kung ang IP ng kliyente ay nasa hanay ng mga pinapayagang IP, kung gayon ang susunod na hakbang ay makuha ang hiniling na landas at extension ng file. Kung walang laman ang extension, ipinapalagay namin na humihiling ang user ng folder at bumuo ng path gamit ang DIRECTORY_INDEX na unang tinukoy.
    Sa wakas, kung umiiral ang hiniling na file, ibabalik namin ang FALSE at pinapayagan ang server na i-access ang file. Kung hindi, isang 404 na mensahe ng error ay ipinapakita.

    Ipagpatuloy

    Ito lang. Tulad ng nakikita mo, ang php server ay madaling gamitin. Ang aming personal na server ay napaka-simple. Ang code ay maaaring i-optimize at isama sa mas kumplikado at functional na mga klase. Maligayang coding!

    p.s. Malugod kong tatanggapin ang mga kritisismo at komento sa pagsasalin sa isang personal na mensahe.

    Superglobal array $_SERVER

    Ang isa sa pinakamahalagang paunang natukoy na mga array ay ang $_SERVER array - inilalagay ng interpreter ng PHP ang mga variable na natanggap mula sa server dito. Kung wala ang mga variable na ito, mahirap ayusin ang buong suporta para sa mga Web application. Nasa ibaba ang isang paglalarawan ng pinakamahalagang elemento ng $_SERVER superglobal array.

    Magkomento

    Maaari mong tingnan ang buong listahan ng mga elemento ng $_SERVER array gamit ang print_r() function, na nagpi-print ng dump ng array, o gamit ang phpinfo() function, na nagpapakita ng impormasyon tungkol sa PHP interpreter.

    Elemento na $_SERVER["DOCUMENT_ROOT"]

    Ang elementong $_SERVER["DOCUMENT_ROOT"] ay naglalaman ng path patungo sa root directory ng server kung ang script ay isinasagawa sa isang virtual host, tinutukoy ng elementong ito ang path sa root directory ng virtual host. Yung. sa httpd.conf configuration file, ang virtual host ay mayroong DocumentRoot directive na nakatakda sa "D:/main", ang $_SERVER["DOCUMENT_ROOT"] na elemento ay maglalaman ng value na "D:main".

    Elemento $_SERVER["HTTP_ACCEPT"]

    Ang elementong $_SERVER["HTTP_ACCEPT"] ay naglalarawan sa mga kagustuhan sa uri ng dokumento ng kliyente. Ang mga nilalaman ng elementong ito ay kinukuha mula sa Accept HTTP header na ipinadala ng kliyente sa server. Maaaring ganito ang hitsura ng nilalaman ng header na ito

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

    Binibigyang-daan ka ng Accept header na tukuyin ang uri ng media na mas gustong matanggap ng kliyente bilang tugon sa kahilingan nito. Ang header na ito ay nagpapaalam sa server na ang tugon ay limitado sa isang maliit na hanay ng mga gustong uri.

    Ang simbolo na * ay ginagamit sa pagpapangkat ng mga uri sa isang hilera ng media. Halimbawa, ang simbolo */* ay tumutukoy sa paggamit ng lahat ng uri, at ang uri ng notasyon/* ay tumutukoy sa paggamit ng lahat ng mga subtype ng napiling uri ng uri.

    Magkomento

    Ang mga uri ng media ay pinaghihiwalay ng mga kuwit.

    Ang bawat serye ng media ay nailalarawan din ng isang karagdagang hanay ng mga parameter. Ang isa sa mga ito ay ang tinatawag na relative preference coefficient q, na kumukuha ng mga halaga mula 0 hanggang 1, ayon sa pagkakabanggit, mula sa hindi gaanong ginustong mga uri hanggang sa mas gusto.

    Magkomento

    Ang paggamit ng maramihang mga parameter ng q ay nagbibigay-daan sa kliyente na sabihin sa server ang kamag-anak nitong kagustuhan para sa isang partikular na uri ng media.

    Bilang default, ang q parameter ay 1. Nahihiwalay din ito sa uri ng media ng isang semicolon.

    Halimbawa ng isang Tanggapin ang header:

    Tanggapin: audio/*; q=0.2, audio/basic

    Sa header na ito, ang unang uri ay audio/*, na kinabibilangan ng lahat ng mga dokumentong pangmusika at nailalarawan sa pamamagitan ng isang preference coefficient na 0.2. Pinaghihiwalay ng mga kuwit, ang audio/basic na uri ay ipinahiwatig, kung saan ang preference coefficient ay hindi tinukoy at tumatagal ng default na halaga ng isa. Sa pagsipi sa RFC2616, ang heading na ito ay maaaring bigyang-kahulugan tulad ng sumusunod: "Mas gusto ko ang audio/basic na uri, ngunit maaari rin akong magpadala ng mga dokumento ng anumang iba pang uri ng audio, kung available, pagkatapos bawasan ang preference factor ng higit sa 80%."

    Maaaring mas kumplikado ang halimbawa.
    Tanggapin: text/plain; q=0.5, text/html,

    Magkomento

    text/x-dvi;

    q=0.8, text/x-c

    Tandaan na ang elementong $_SERVER["HTTP_ACCEPT"] ay naglalaman ng eksaktong parehong impormasyon, ngunit wala ang paunang Accept header.

    Ang header na ito ay binibigyang kahulugan bilang mga sumusunod: Ang mga uri ng dokumento na text/html at text/x-c ay mas gusto, ngunit kung ang mga ito ay hindi magagamit, ang kliyente na gumagawa ng kahilingang ito ay mas gusto ang text/x-dvi, at, kung iyon ay hindi magagamit, ito maaaring tanggapin ang uri ng teksto/ payak

    Accept-Wika: ru, en;

    q=0.7

    Na maaaring bigyang-kahulugan bilang mga sumusunod: mas pinipili ng kliyente ang wikang Ruso, ngunit kung hindi ito magagamit, sumasang-ayon siyang tumanggap ng mga dokumento sa Ingles. Ang elementong $_SERVER["HTTP_ACCEPT_LANGUAGE"] ay maglalaman ng eksaktong parehong impormasyon, ngunit wala ang Accept-Language header:

    ru, en; q=0.7

    Ang mga nilalaman ng elementong $_SERVER["HTTP_ACCEPT_LANGUAGE"] ay maaaring gamitin upang matukoy ang nasyonalidad ng mga bisita. Gayunpaman, ang mga resulta ay magiging tantiya, dahil maraming mga gumagamit ang gumagamit ng mga Ingles na bersyon ng mga browser, na mag-aabiso sa server na mas gusto ng bisita ang isang wika lamang - Ingles.

    Elemento $_SERVER["HTTP_HOST"]

    Ang elementong $_SERVER["HTTP_HOST"] ay naglalaman ng pangalan ng server, na karaniwang tumutugma sa domain name ng site na matatagpuan sa server. Karaniwan, ang pangalang tinukoy sa parameter na ito ay kapareho ng pangalang $_SERVER["SERVER_NAME"]. Ang parameter ay naglalaman lamang ng domain name na walang pangalan ng protocol (http://), i.e.

    www.sofftime.ru

    Elemento $_SERVER["HTTP_REFERER"]

    Ang elementong $_SERVER["HTTP_REFERER"] ay naglalaman ng address ng pahina kung saan nagmula ang bisita sa pahinang ito. Ang paglipat ay dapat isagawa sa pamamagitan ng isang link. Gumawa tayo ng dalawang pahinang index.php at page.php.

    pahina ng index.php "echo
    "
    ;
    Mag-link sa pahina ng PHP
    echo .
    ?>

    $_SERVER["HTTP_REFERER"]

    Ang page.php page ay magkakaroon ng katulad na nilalaman, ngunit ang link ay ituturo sa index.php page.

    pahina ng index.php "echo
    "
    ;
    Pahina ng pahina.php echo.
    echo .
    ?>

    "Mga nilalaman ng $_SERVER["HTTP_REFERER"] - "

    Kapag lumipat mula sa isang pahina patungo sa isa pa, ang address ng pahina kung saan ginawa ang paglipat ay ipapakita sa ilalim ng link.

    Elemento $_SERVER["HTTP_USER_AGENT"]

    Ang elementong $_SERVER["HTTP_USER_AGENT"] ay naglalaman ng impormasyon tungkol sa uri at bersyon ng browser at operating system ng bisita.

    Magkomento

    Narito ang isang tipikal na nilalaman ng linyang ito: "Mozilla/4.0 (tugma; MSIE 6.0; Windows NT 5.1)". Ang pagkakaroon ng substring na "MSIE 6.0" ay nagpapahiwatig na ang bisita ay tumitingin sa pahina gamit ang Internet Explorer na bersyon 6.0. Ang linyang "Windows NT 5.1" ay nagpapahiwatig na ang operating system ay Windows XP.

    Kung ginagamit ng bisita ang Opera browser, ang nilalaman ng $_SERVER["HTTP_USER_AGENT"] ay maaaring magmukhang ganito: "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.04 ".

    Magkomento

    Ang substring na "MSIE 6.0" ay naroroon din dito, na nagpapahiwatig na ang Opera browser ay tugma sa Internet Explorer browser at gumagamit ng parehong Windows dynamic na mga aklatan. Samakatuwid, kapag sinusuri ang string na ibinalik ng browser, dapat mong tandaan na ang Internet Explorer ay tumutukoy sa isang string na naglalaman ng substring na "MSIE 6.0" at hindi naglalaman ng substring na "Opera". Bilang karagdagan, mula sa linyang ito maaari nating tapusin na ang gumagamit ay gumagamit ng Windows 98 operating system.

    Maaaring ganito ang hitsura ng ahente ng gumagamit ng Firefox browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5.

    Kapag ginagamit ang browser ng Netscape, ang nilalaman ng elementong $_SERVER["HTTP_USER_AGENT"] ay maaaring magmukhang ganito: "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1" . Ang pag-aari ng browser na ito ay maaaring matukoy sa pamamagitan ng pagkakaroon ng substring na "Netscape". Bilang karagdagan, maaari mong malaman na ang bisita ay nag-access sa Internet gamit ang isang operating bersyon ng Linux, na may isang kernel na na-optimize para sa Pentium IV, habang nasa X-Window graphical shell. Ang mekanismong ito ay maginhawang gamitin upang mangolekta ng istatistikal na impormasyon, na nagpapahintulot sa mga taga-disenyo na i-optimize ang mga pahina para sa pinakakaraniwang mga browser.

    Elemento $_SERVER["REMOTE_ADDR"]

    Magkomento

    Ang elementong $_SERVER["REMOTE_ADDR"] ay naglalaman ng IP address ng kliyente. Kapag sumusubok sa isang lokal na makina, ang address na ito ay magiging katumbas ng 127.0.0.1. Gayunpaman, kapag sinusubukan sa network, ibabalik ng variable ang IP address ng kliyente o ang huling proxy server kung saan naabot ng kliyente ang server. Kung ang kliyente ay gumagamit ng proxy server, maaari mong malaman ang IP address nito gamit ang HTTP_X_FORWARDED_FOR environment variable, ang halaga nito ay maaaring makuha gamit ang getenv() function.

    Ang mga proxy server ay mga espesyal na intermediate server na nagbibigay ng isang espesyal na uri ng serbisyo: traffic compression, data encoding, adaptation para sa mga mobile device, atbp. Sa maraming proxy server, mayroong tinatawag na anonymous proxy server, na nagbibigay-daan sa iyong itago ang tunay na IP address ng kliyente ay hindi nagbabalik ng HTTP_X_FORWARDED_FOR environment variable.

    Kinukuha ang HTTP_X_FORWARDED_FOR environment variable
    ?>

    echo getenv(HTTP_X_FORWARDED_FOR);

    Ang elementong $_SERVER["SCRIPT_FILENAME"] ay naglalaman ng ganap na landas patungo sa file mula sa ugat ng disk. Kaya, kung ang server ay nagpapatakbo ng Windows operating system, ang landas na ito ay maaaring magmukhang ganito: "d:main estindex.php", i.e. ang path ay tinukoy mula sa disk; sa isang UNIX-tulad ng operating system, ang landas ay tinukoy mula sa root directory /, halimbawa "/var/share/www/test/index.php".

    Elemento na $_SERVER["SERVER_NAME"]

    Ang elementong $_SERVER["SERVER_NAME"] ay naglalaman ng pangalan ng server, na karaniwang tumutugma sa domain name ng site na matatagpuan dito.

    Halimbawa,

    www.softtime.ru

    Gamit ang $_SERVER Array Elements

    Ang nilalaman ng elementong $_SERVER["SERVER_NAME"] ay kadalasang pareho sa nilalaman ng elementong $_SERVER["HTTP_HOST"]. Bilang karagdagan sa pangalan ng server, binibigyang-daan ka ng superglobal array na $_SERVER na malaman ang isang bilang ng mga parameter ng server, halimbawa, ang IP address ng server, ang listening port, kung saan naka-install ang Web server at ang bersyon ng HTTP protocol. Ang impormasyong ito ay inilalagay sa mga elementong $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"], at $_SERVER["SERVER_PROTOCOL"], ayon sa pagkakabanggit.
    " ;
    Pahina ng pahina.php Nasa ibaba ang isang halimbawa gamit ang mga elementong ito. echo "Pangalan ng server - " . $_SERVER["SERVER_NAME"]. "
    " ;
    "IP address ng server -"
    " ;
    . $_SERVER["SERVER_ADDR"]. "
    " ;
    Pahina ng pahina.php echo "Server port - " . $_SERVER["SERVER_PORT"]. " echo "Web server - " . $_SERVER["SERVER_SOFTWARE"]. "
    " ;
    ?>

    "Bersyon ng HTTP protocol - "

    . $_SERVER["SERVER_PROTOCOL"]. "