სამშენებლო პორტალი - კარები და კარიბჭე.  ინტერიერი.  კანალიზაცია.  მასალები.  ავეჯი.  სიახლეები

მეორე გაკვეთილზე დავწერთ კიდევ ორ კლასს და მთლიანად დავასრულებთ სცენარის შიდა ნაწილს.

Გეგმა

ამ გაკვეთილების სერიის მიზანია შექმნას მარტივი აპლიკაცია, რომელიც მომხმარებლებს საშუალებას აძლევს დარეგისტრირდნენ, შევიდნენ, გამოვიდნენ და შეცვალონ პარამეტრები. კლასს, რომელიც შეიცავს მომხმარებლის შესახებ ყველა ინფორმაციას, დაერქმევა User და იგი განისაზღვრება User.class.php ფაილში. კლასს, რომელიც იქნება პასუხისმგებელი შესვლის/გასვლისთვის, დაერქმევა UserTools (UserTools.class.php).

ცოტა კლასების დასახელების შესახებ

სწორი ტონი არის კლასის ფაილების დასახელება იმავე სახელით, როგორც თავად კლასი. ამ გზით ადვილია კლასის საქაღალდეში თითოეული ფაილის მიზნის დადგენა.

ასევე ხშირია .class ან .inc დამატება კლასის ფაილის სახელის ბოლოს. ამრიგად, ჩვენ მკაფიოდ განვსაზღვრავთ ფაილის დანიშნულებას და შეგვიძლია გამოვიყენოთ .htaccess ამ ფაილებზე წვდომის შესაზღუდად.

მომხმარებლის კლასი (User.class.php)

ეს კლასი განსაზღვრავს თითოეულ მომხმარებელს. როგორც ეს აპლიკაცია იზრდება, „მომხმარებლის“ განმარტება შეიძლება მნიშვნელოვნად შეიცვალოს. საბედნიეროდ, OOP პროგრამირება აადვილებს მომხმარებლის დამატებითი ატრიბუტების დამატებას.

კონსტრუქტორი

ამ კლასში ჩვენ გამოვიყენებთ კონსტრუქტორს - ეს არის ფუნქცია, რომელიც ავტომატურად გამოიძახება კლასის შემდეგი ასლის შექმნისას. ეს საშუალებას გვაძლევს ავტომატურად გამოვაქვეყნოთ ზოგიერთი ატრიბუტი პროექტის შექმნის შემდეგ. ამ კლასში კონსტრუქტორი მიიღებს ერთ არგუმენტს: ასოციაციურ მასივს, რომელიც შეიცავს ერთ სტრიქონს ჩვენს მონაცემთა ბაზაში მომხმარებლების ცხრილიდან.

require_once "db.class.php"; კლასის მომხმარებელი ( საჯარო $id; საჯარო $username; საჯარო $hashedPassword; საჯარო $email;
საჯარო $joinDate;
//კონსტრუქტორი გამოიძახება ახალი ობიექტის შექმნისას//არგუმენტად იღებს ასოციაციურ მასივს DB მწკრივით. ფუნქცია __construct($data) ($this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" მომხმარებლის სახელი"])) ? $data["username"] : ""; $this->hashedPassword = (isset($data["პაროლი"])) ? $data["პაროლი"] : ""; $this- >email = (isset($data["email"])) ? $data["email"] : ""; $this->joinDate = (isset($data["join_date"])) ? $data[" join_date"] : "";)
საჯარო ფუნქცია შენახვა ($isNewUser = false) ( //ახალი მონაცემთა ბაზის ობიექტის შექმნა. $db = new DB(); //თუ მომხმარებელი უკვე დარეგისტრირებულია და ჩვენ //უბრალოდ ვაახლებთ მის ინფორმაციას. if(!$isNewUser ) ( //დააყენეთ მონაცემთა მასივი $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"email" => ""$this->email"");
//მწკრივის განახლება მონაცემთა ბაზაში $db->update($data, "users", "id = ".$this->id); )else ( //თუ მომხმარებელი პირველად დარეგისტრირდება. $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"" , "email" => ""$this->email"", "join_date" => """.date("Y-m-d H:i:s",time()).""); $this-> id = $db->insert($data, "მომხმარებლები"); $this->joinDate = დრო(); ) return true; )) ?>

ახსნა

კოდის პირველი ნაწილი, კლასის ზონის გარეთ, უზრუნველყოფს კლასის კავშირს მონაცემთა ბაზასთან (რადგან User კლასში არის ფუნქცია, რომელიც მოითხოვს ამ კლასს).

"დაცული" კლასის ცვლადების ნაცვლად (გამოყენებული გაკვეთილი 1), ჩვენ განვსაზღვრავთ მათ, როგორც "საჯარო". ეს ნიშნავს, რომ ნებისმიერ კოდს კლასის გარეთ აქვს წვდომა ამ ცვლადებზე User ობიექტთან მუშაობისას.

კონსტრუქტორი იღებს მასივს, რომელშიც ცხრილის სვეტები არის გასაღები. ჩვენ განვსაზღვრავთ კლასის ცვლადს $this->variablename-ის გამოყენებით. ამ კლასის მაგალითში ჩვენ პირველ რიგში ვამოწმებთ არის თუ არა გარკვეული გასაღების მნიშვნელობა. თუ ასეა, მაშინ ჩვენ დავაყენეთ კლასის ცვლადი ამ მნიშვნელობაზე. წინააღმდეგ შემთხვევაში, ცარიელი სტრიქონი. კოდი იყენებს ბრუნვის აღნიშვნის მოკლე ფორმას, თუ:

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

ამ მაგალითში ჩვენ ვამოწმებთ, უდრის თუ არა 3 ოთხს! თუ კი - მაშინ $value = "A", არა - $value = "B". ჩვენს მაგალითში, შედეგი არის $value = “B”.

მონაცემთა ბაზაში მომხმარებლების შესახებ ინფორმაციის შენახვა

შენახვის ფუნქცია გამოიყენება მონაცემთა ბაზის ცხრილში ცვლილებების შესატანად მომხმარებლის ობიექტში მიმდინარე მნიშვნელობებით. ეს ფუნქცია იყენებს DB კლასს, რომელიც ჩვენ შევქმენით პირველ სახელმძღვანელოში. კლასის ცვლადების გამოყენებით დაყენებულია $data მასივი. თუ ეს არის მომხმარებლის პირველად შენახვა, მაშინ $isNewUser გადაეცემა $true (ნაგულისხმევი არის false). თუ $isNewUser = $true მაშინ გამოიძახება DB კლასის insert() ფუნქცია. წინააღმდეგ შემთხვევაში, განახლება() ფუნქცია გამოიძახება. ორივე შემთხვევაში, ინფორმაცია მომხმარებლის ობიექტიდან შეინახება მონაცემთა ბაზაში.

კლასი UserTools.class.php

ეს კლასი შეიცავს მომხმარებლებთან დაკავშირებულ ფუნქციებს: login(), logout(), checkUsernameExists() და get(). მაგრამ ამ აპლიკაციის გაფართოებით, შეგიძლიათ კიდევ ბევრი დაამატოთ.

//UserTools.class.php require_once "User.class.php"; require_once "db.class.php";
კლასის UserTools (
//შედით მომხმარებელი. ჯერ ამოწმებს, ემთხვევა თუ არა // მომხმარებლის სახელი და პაროლი მონაცემთა ბაზაში რიგს. //თუ ის წარმატებულია, დააყენეთ სესიის ცვლადები //და შეინახეთ მომხმარებლის ობიექტი შიგნით.
საჯარო ფუნქციის შესვლა ($username, $password)
{
$hashedPassword = md5($პაროლი); $result = mysql_query("SELECT * FROM users WHERE username = "$username" AND პაროლი = "$hashedPassword""); if(mysql_num_rows($result) == 1) ($_SESSION["user"] = serialize(ახალი მომხმარებელი(mysql_fetch_assoc($result))); $_SESSION["login_time"] = დრო(); $_SESSION["logged_in" "] = 1; დაბრუნება true; )else( return false; ) )
//მომხმარებლის გასვლა. გაანადგურეთ სესიის ცვლადები. საჯარო ფუნქციის გამოსვლა () ( unset ($_SESSION ["მომხმარებელი"]); unset ($_SESSION["login_time"]); unset ($_SESSION["logged_in"]); session_destroy(); ) //შეამოწმეთ, თუ არა მომხმარებლის სახელი არსებობს. //ეს იძახება რეგისტრაციის დროს, რათა დარწმუნდეს, რომ მომხმარებლის ყველა სახელი უნიკალურია. საჯარო ფუნქციის checkUsernameExists($username) ($result = mysql_query("აირჩიეთ id მომხმარებლებისგან, სადაც username="$username""); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//მიიღე მომხმარებლის //აბრუნებს მომხმარებლის ობიექტს. იღებს მომხმარებლის ID-ს, როგორც შეყვანის საჯარო ფუნქციას get($id) ($db = new DB(); $result = $db->select("users", "id = $id"); დააბრუნოს ახალი მომხმარებელი($result );))
?>

login() ფუნქცია

login() ფუნქცია თავისთავად ახსნილია. ის იღებს მომხმარებლის არგუმენტებს $username და $password და ამოწმებს ისინი ემთხვევა თუ არა. თუ ყველაფერი ემთხვევა, ქმნის მომხმარებლის ობიექტს ყველა ინფორმაციით და ინახავს მას სესიაში. გაითვალისწინეთ, რომ ჩვენ ვიყენებთ მხოლოდ PHP serialize() ფუნქციას. ის ქმნის ობიექტის მუდმივ ვერსიას, რომელიც ადვილად შეიძლება unserialize-ით unserialize(). ასევე შეინახება შესვლის დრო. ეს შეიძლება მოგვიანებით იქნას გამოყენებული, რათა მომხმარებლებს მიაწოდოს ინფორმაცია საიტზე მათი ყოფნის ხანგრძლივობის შესახებ.

თქვენ ასევე შეგიძლიათ შეამჩნიოთ, რომ ჩვენ ვაყენებთ $_SESSION["logged_in"]-ს 1-ზე. ეს საშუალებას გვაძლევს ადვილად შევამოწმოთ თითოეულ გვერდზე, არის თუ არა მომხმარებელი შესული. საკმარისია მხოლოდ ამ ცვლადის შემოწმება.

logout() ფუნქცია

ასევე მარტივი ფუნქცია. PHP-ის unset() ფუნქცია ასუფთავებს ცვლადებს მეხსიერებაში, ხოლო session_destroy() წაშლის სესიას.

checkUsernameExists() ფუნქცია

ვინც ინგლისური იცის, ადვილად გაიგებს ფუნქციას. ის უბრალოდ კითხულობს მონაცემთა ბაზას, გამოიყენება თუ არა ასეთი შესვლა.

get() ფუნქცია

ეს ფუნქცია იღებს მომხმარებლის უნიკალურ ID-ს და კითხულობს მონაცემთა ბაზას DB კლასის, კერძოდ select() ფუნქციის გამოყენებით. ის მიიღებს ასოციაციურ მასივს მომხმარებლის გარკვეული ინფორმაციით და შექმნის ახალ მომხმარებლის ობიექტს, გადასცემს მასივს კონსტრუქტორს.

სად შეიძლება მისი გამოყენება? მაგალითად, თუ შექმნით გვერდს, რომელიც უნდა აჩვენოს კონკრეტული მომხმარებლის პროფილები, მოგიწევთ ამ ინფორმაციის დინამიურად მიღება. აი, როგორ შეგიძლიათ ამის გაკეთება: (ვთქვათ, URL არის http://www.website.com/profile.php?userID=3)

//შენიშვნა: ჯერ მოგიწევთ მონაცემთა ბაზის კავშირის გახსნა. //იხილეთ ნაწილი 1 დამატებითი ინფორმაციისთვის ამის შესახებ. //თქვენ ასევე უნდა დარწმუნდეთ, რომ თქვენ შეიტანეთ კლასის ფაილები.
$tools = new UserTools(); $user = $tools->get($_REQUEST["userID"]); echo "მომხმარებლის სახელი: ".$user->username.""; echo "Joined On: ".$user->joinDate."";

მარტივად! სიმართლე?

სერვერის დასრულება: global.inc.php

global.inc.php საჭიროა საიტის ყველა გვერდისთვის. რატომ? ამ გზით ჩვენ განვათავსებთ ყველა ჩვეულებრივ ოპერაციას, რომელიც გვჭირდება გვერდზე. მაგალითად, ჩვენ დავიწყებთ session_start(). ასევე გაიხსნება მონაცემთა ბაზის კავშირი.

require_once "classes/UserTools.class.php";
require_once "classes/DB.class.php";
//დაკავშირება მონაცემთა ბაზასთან $db = new DB(); $db->connect();
//დაწყება UserTools ობიექტი $userTools = new UserTools(); //სესიის დაწყება
session_start();
//განაახლეთ სესიის ცვლადები, თუ შესული ხართ if(isset($_SESSION["logged_in"])) ($user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id)); ) ?>

Რას აკეთებს?

აქ რამდენიმე რამ ხდება. პირველ რიგში, ჩვენ ვხსნით კავშირს მონაცემთა ბაზასთან.

დაკავშირების შემდეგ ვიწყებთ session_start() ფუნქციას. ფუნქცია ქმნის სესიას ან აგრძელებს მიმდინარეს, თუ მომხმარებელი უკვე შესულია. ვინაიდან ჩვენი აპლიკაცია შექმნილია მომხმარებლებისთვის შესვლის/გამოსვლისთვის, ეს ფუნქცია საჭიროა ყველა გვერდზე.

შემდეგი, ჩვენ ვამოწმებთ, არის თუ არა მომხმარებელი შესული. თუ ასეა, ჩვენ განვაახლებთ $_SESSION["user"] მომხმარებლის უახლესი ინფორმაციის საჩვენებლად. მაგალითად, თუ მომხმარებელი ცვლის ელფოსტას, სესია კვლავ შეინახავს ძველს. მაგრამ ავტომატური განახლების დახმარებით ეს არ მოხდება.

ამით მთავრდება მეორე ნაწილი! ხვალ ველით ბოლო გაკვეთილს ამ თემაზე.

Ყველაფერი საუკეთესო!

ვინც მეტ-ნაკლებად სერიოზულად სწავლობდა PHPიცოდეთ, რომ არსებობს ერთი ძალიან სასარგებლო გლობალური მასივი PHP, რომელსაც ქვია $_SERVER. და ამ სტატიაში მსურს გავაანალიზო ყველაზე პოპულარული გასაღებები და მათი მნიშვნელობები ამ მასივში, რადგან მათი ცოდნა უბრალოდ აუცილებელია დამწყებთათვისაც კი PHP პროგრამისტი.

სანამ გააგრძელებენ $_SERVER გლობალურ მასივზე PHP-შიმე მხოლოდ მცირე მინიშნებას მოგცემთ. მასში ჩაშენებულია შესანიშნავი ფუნქცია PHP, რომელსაც ქვია phpinfo (). მოდით დაუყოვნებლივ მივცეთ მისი გამოყენების მაგალითი:

phpinfo();
?>

ამ მარტივი სკრიპტის შესრულების შედეგად, ნახავთ უზარმაზარ ცხრილს სხვადასხვა PHP თარჯიმანის პარამეტრები, მათ შორის, ბოლოსთან ახლოს იქნება მნიშვნელობების ცხრილი გლობალური მასივი $_SERVER. მასში ჩამოთვლილია ყველა გასაღები და ყველა მათი შესაბამისი მნიშვნელობა. როგორ შეიძლება ეს დაგეხმაროთ? და ის ფაქტი, რომ თუ გჭირდებათ ესა თუ ის მნიშვნელობა და დაგავიწყდათ რა ჰქვია კლავიშს, მაშინ გამოიყენეთ ფუნქცია phpinfo ()თქვენ ყოველთვის შეგიძლიათ გახსოვდეთ მისი სახელი. ზოგადად, თქვენ შეასრულებთ ამ სკრიპტს და მაშინვე გამიგებთ.

ახლა მოდით გადავიდეთ ყველაზე პოპულარულზე $_SERVER მასივის გასაღებები:

  • HTTP_USER_AGENT- ეს გასაღები საშუალებას გაძლევთ გაიგოთ კლიენტის მახასიათებლები. უმეტეს შემთხვევაში, ეს ნამდვილად ბრაუზერია, თუმცა, ყოველთვის არა. და კიდევ, თუ ბრაუზერი, მაშინ რომელი, ამის შესახებ შეგიძლიათ გაიგოთ ამ ცვლადში.
  • HTTP_REFERER- შეიცავს ამ ფაილის აბსოლუტურ გზას ( PHP სკრიპტი, HTML გვერდი) საიდანაც გადაერთეთ ამ სკრიპტზე. უხეშად რომ ვთქვათ, საიდან გაჩნდა კლიენტი.
  • SERVER_ADDR - IP მისამართისერვერი.
  • REMOTE_ADDR - IP მისამართიკლიენტი.
  • DOCUMENT_ROOT- ფიზიკური გზა საიტის root დირექტორიაში. ეს პარამეტრი დაყენებულია მეშვეობით Apache სერვერის კონფიგურაციის ფაილი.
  • SCRIPT_FILENAME- ფიზიკური გზა მოწოდებული სკრიპტისკენ.
  • QUERY_STRING- ძალიან სასარგებლო მნიშვნელობა, რომელიც საშუალებას გაძლევთ მიიღოთ სტრიქონი შეკითხვით და შემდეგ შეგიძლიათ გააანალიზოთ ეს სტრიქონი.
  • REQUEST_URI- კიდევ უფრო სასარგებლო მნიშვნელობა, რომელიც შეიცავს არა მხოლოდ თავად მოთხოვნას, არამედ გამოძახებული სკრიპტის მიმართულ გზას root-დან. ეს ძალიან ხშირად გამოიყენება დუბლირების მოსაშორებლად index.php, ანუ როცა გვაქვს ასეთი URL: "http://mysite.ru/index.php"და" http://mysite.ru/"გაიყვანეთ ერთ გვერდზე და URL-ებიგანსხვავებული, შესაბამისად, დუბლირება, რაც ცუდ გავლენას მოახდენს საძიებო სისტემის ოპტიმიზაციაზე. და აქ დახმარებით REQUEST_URIშეგვიძლია განვსაზღვროთ: index.phpთუ არა სცენარი ერქვა. და ჩვენ შეგვიძლია გადამისამართება index.php(თუ ის იმყოფებოდა REQUEST_URI) გარეშე index.php. შედეგად, ასეთი მოთხოვნის გაგზავნისას: " http://mysite.ru/index.php?id=5“, გვექნება გადამისამართება URL: "http://mysite.ru/?id=5„ანუ დუბლირებას მოვშორდით მოხსნით URLეს index.php.
  • SCRIPT_NAME- შედარებითი გზა გამოძახებულ სკრიპტამდე.

ალბათ ეს ყველაფერი ელემენტია $_SERVER გლობალური მასივი PHP-შირომლებიც რეგულარულად გამოიყენება. მათ უნდა იცოდნენ და შეეძლოთ მათი გამოყენება საჭიროების შემთხვევაში.

$HTTP_SERVER_VARS [ამოღებულია]

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

$_SERVER -- $HTTP_SERVER_VARS [ამოღებულია]სერვერისა და გაშვების ინფორმაცია

აღწერა

$_SERVER ცვლადი არის მასივი, რომელიც შეიცავს ინფორმაციას, როგორიცაა სკრიპტის სათაურები, ბილიკები და მდებარეობები. ამ მასივში ჩანაწერები გენერირებულია ვებ სერვერის მიერ. არ არსებობს გარანტია, რომ ყველა ვებ სერვერი უზრუნველყოფს რომელიმე მათგანს; სერვერმა შეიძლება გამოტოვოს ზოგიერთი მათგანი ან მიაწოდოს სხვები, რომლებიც აქ არ არის ჩამოთვლილი. თუმცა, ბევრი ამ ცვლადი არის » CGI/1.1 სპეციფიკაციაში, ასე რომ თქვენ შეგიძლიათ ველით, რომ ისინი განხორციელდება კონკრეტულ ვებ სერვერზეც.

$HTTP_SERVER_VARS ცვლადი შეიცავს იგივე საწყის ინფორმაციას, მაგრამ არა სუპერგლობალური. (გაითვალისწინეთ, რომ $HTTP_SERVER_VARS და $_SERVER სხვადასხვა ცვლადებია, ამიტომ PHP მათ შესაბამისად ამუშავებს.) ასევე გაითვალისწინეთ, რომ "გრძელი მასივები" ამოღებულია PHP 5.4.0-ში, ამიტომ $HTTP_SERVER_VARS აღარ არსებობს.

ინდექსები

$_SERVER მასივში შეიძლება იპოვოთ ან არ იპოვოთ რომელიმე შემდეგი ელემენტი. გაითვალისწინეთ, რომ რამდენიმე ელემენტი იქნება ხელმისაწვდომი (ან ნამდვილად აქვს მნიშვნელობა), თუ PHP მუშაობს ბრძანების ხაზი.

"PHP_SELF" ამჟამად შესრულებული სკრიპტის ფაილის სახელი დოკუმენტის ფესვთან შედარებით. მაგალითად, $_SERVER["PHP_SELF"] სკრიპტში http://example.com/foo/bar.php იქნება /foo/bar.php . მუდმივი __FILE__შეიცავს მიმდინარე (ანუ დაკავშირებული) ფაილის სრულ გზას და ფაილის სახელს. თუ PHP გაშვებულია ბრძანების ხაზზე, ეს ცვლადი შეიცავს სკრიპტის სახელს PHP 4.3.0-დან. ადრე მიუწვდომელი იყო. "არგვ " სკრიპტზე გადაცემული არგუმენტების მასივი. როდესაც სკრიპტი გაშვებულია ბრძანების სტრიქონზე, ის აძლევს C-ის მსგავს წვდომას ბრძანების ხაზის პარამეტრებზე. როდესაც გამოიძახება GET მეთოდით, ეს მასივი შეიცავს შეკითხვის სტრიქონს. "argc " შეიცავს სკრიპტზე გადაცემული პარამეტრების რაოდენობას (თუ გაშვებულია ბრძანების ხაზზე)."GATEWAY_INTERFACE" შეიცავს სერვერის მიერ გამოყენებული CGI სპეციფიკაციის ვერსიას; მაგალითად" CGI/1.1". "SERVER_ADDR" სერვერის IP მისამართი, სადაც მიმდინარე სკრიპტი მუშაობს."ᲡᲔᲠᲕᲔᲠᲘᲡ ᲡᲐᲮᲔᲚᲘ" ჰოსტის სახელი, სადაც მუშაობს მიმდინარე სკრიპტი. თუ სკრიპტი მუშაობს ვირტუალურ ჰოსტზე, ის შეიცავს ამ ვირტუალური ჰოსტისთვის განსაზღვრულ სახელს."SERVER_SOFTWARE" სერვერის საიდენტიფიკაციო სტრიქონი, რომელიც მითითებულია სათაურებში, როდესაც მოთხოვნას უპასუხებენ."SERVER_PROTOCOL" საინფორმაციო პროტოკოლის დასახელება და ვერსია, რომლითაც მოითხოვეს გვერდი; მაგალითად " HTTP/1.0"; "REQUEST_METHOD" რა მეთოდი იქნა გამოყენებული გვერდის მოთხოვნისას; მაგალითად " მიიღეთ", "HEAD", "პოსტი", "ᲓᲐᲓᲔᲑᲐ".

კომენტარი:

PHP სკრიპტი წყდება სათაურების გაგზავნის შემდეგ (ანუ მას შემდეგ, რაც ის აკეთებს რაიმე გამომავალს გამომავალი ბუფერის გარეშე), თუ მოთხოვნა შესრულებულია მეთოდით. HEAD.

"REQUEST_TIME" მოთხოვნის დაწყების დროითი ნიშანი. ხელმისაწვდომია PHP 5.1.0-დან."REQUEST_TIME_FLOAT" მოთხოვნის დაწყების დროის ანაბეჭდი, ზუსტი მიკროწამებში. ხელმისაწვდომია PHP 5.4.0-დან."QUERY_STRING" შეკითხვის სტრიქონი, ასეთის არსებობის შემთხვევაში, რომლითაც გვერდი იქნა აღებული."DOCUMENT_ROOT" დოკუმენტის ძირეული დირექტორია, სადაც შესრულებულია მიმდინარე სკრიპტი, არის ზუსტად ის, რაც მითითებულია სერვერის კონფიგურაციის ფაილში."HTTP_ACCEPT" სათაურის შინაარსი მიღება:მიმდინარე მოთხოვნიდან, ასეთის არსებობის შემთხვევაში."HTTP_ACCEPT_CHARSET" სათაურის შინაარსი AcceptCharset:მიმდინარე მოთხოვნიდან, ასეთის არსებობის შემთხვევაში. Მაგალითად: " iso-8859-1,*,utf-8". "HTTP_ACCEPT_ENCODING" სათაურის შინაარსი კოდირების მიღება: gzip". "HTTP_ACCEPT_LANGUAGE" სათაურის შინაარსი Accept-Language:მიმდინარე მოთხოვნიდან, ასეთის არსებობის შემთხვევაში. Მაგალითად: " en". "HTTP_CONNECTION" სათაურის შინაარსი კავშირი:მიმდინარე მოთხოვნიდან, ასეთის არსებობის შემთხვევაში. Მაგალითად: " შეინახე ცოცხალი". "HTTP_HOST" სათაურის შინაარსი მასპინძელი:მიმდინარე მოთხოვნიდან, ასეთის არსებობის შემთხვევაში."HTTP_REFERER" გვერდის მისამართი (ასეთის არსებობის შემთხვევაში), რომელმაც მომხმარებლის ბრაუზერი ამ გვერდზე მოიყვანა. ეს სათაური დაყენებულია მომხმარებლის ვებ ბრაუზერის მიერ. ყველა ბრაუზერი არ აინსტალირებს მას და ზოგიერთი საშუალებას იძლევა შეცვალოს HTTP_REFERER სათაურის შინაარსი, როგორც დამატებითი ფუნქცია. ერთი სიტყვით, მისი ნდობა ნამდვილად არ შეიძლება."HTTP_USER_AGENT" სათაურის შინაარსი მომხმარებლის აგენტი:მიმდინარე მოთხოვნიდან, ასეთის არსებობის შემთხვევაში. ეს სტრიქონი შეიცავს ბრაუზერის აღნიშვნას, რომლითაც მომხმარებელმა მოითხოვა ეს გვერდი. ტიპიური მაგალითია ხაზი: Mozilla/4.5 (X11; U; Linux 2.2.9 i586). სხვა საკითხებთან ერთად, შეგიძლიათ გამოიყენოთ ეს მნიშვნელობა ფუნქციით get_browser () თქვენი გვერდის გამომუშავების მორგება მომხმარებლის ბრაუზერის შესაძლებლობებზე"https" იღებს ცარიელ მნიშვნელობას, თუ მოთხოვნა განხორციელდა HTTPS პროტოკოლით.

კომენტარი: გაითვალისწინეთ, რომ ISAPI-ის გამოყენებისას მნიშვნელობა იქნება გამორთულიათუ მოთხოვნა არ იყო გაკეთებული HTTPS პროტოკოლით.

"REMOTE_ADDR" IP მისამართი, საიდანაც მომხმარებელი ათვალიერებს მიმდინარე გვერდს."REMOTE_HOST" დისტანციური ჰოსტი, საიდანაც მომხმარებელი ათვალიერებს მიმდინარე გვერდს. საპირისპირო DNS ძიება ეფუძნება REMOTE_ADDR ცვლადის მნიშვნელობას.

კომენტარი: თქვენი ვებ სერვერი უნდა იყოს კონფიგურირებული ამ ცვლადის შესაქმნელად. მაგალითად, Apache-ში გჭირდებათ დირექტივის არსებობა ჰოსტის სახელის ძიება ჩართულია httpd.conf ფაილში ამ ცვლადის შესაქმნელად. იხილეთ ასევე gethostbyaddr () .

"REMOTE_PORT" პორტი დისტანციურ მანქანაზე, რომელიც გამოიყენება ვებ სერვერთან კომუნიკაციისთვის."REMOTE_USER" ავტორიზებული მომხმარებელი."REDIRECT_REMOTE_USER" ავტორიზებული მომხმარებელი, თუ მოთხოვნა გადამისამართდა შიდა."SCRIPT_FILENAME"

აბსოლუტური გზა სკრიპტისკენ, რომელიც ამჟამად სრულდება.

კომენტარი:

თუ სკრიპტი გაშვებულია ბრძანების ხაზზე (CLI) შედარებითი ბილიკის გამოყენებით, როგორიცაა file.php ან ../file.php, $_SERVER["SCRIPT_FILENAME"] ცვლადი შეიცავს მომხმარებლის მიერ მითითებულ ფარდობით გზას.

"SERVER_ADMIN" ეს ცვლადი თავის მნიშვნელობას იღებს (Apache-სთვის) სერვერის კონფიგურაციის ფაილში არსებული დირექტივიდან. თუ სკრიპტი მუშაობს ვირტუალურ ჰოსტზე, ეს იქნება ამ ვირტუალური ჰოსტისთვის განსაზღვრული მნიშვნელობა."ᲡᲔᲠᲕᲔᲠᲘᲡ ᲞᲝᲠᲢᲘ" სერვერის კომპიუტერის პორტი, რომელსაც ვებ სერვერი იყენებს დასაკავშირებლად. ნაგულისხმევი პარამეტრებისთვის, მნიშვნელობა იქნება " 80 "; მაგალითად, SLL-ის გამოყენებით, ეს მნიშვნელობა იქნება კონფიგურირებული უსაფრთხო HTTP კავშირებისთვის.

კომენტარი: Apache 2-ში ფიზიკური (რეალური) პორტის მისაღებად, თქვენ უნდა დააინსტალიროთ UseCanonicalName = ჩართულიდა UseCanonicalPhysicalPort = ჩართული, წინააღმდეგ შემთხვევაში ეს მნიშვნელობა შეიძლება იყოს გაყალბებული და არ დააბრუნოს ფიზიკური პორტის რეალური მნიშვნელობა. ამ მნიშვნელობაზე დაყრდნობა სახიფათოა აპლიკაციების კონტექსტში, რომლებიც საჭიროებენ გაძლიერებულ უსაფრთხოებას.

"SERVER_SIGNATURE" სტრიქონი, რომელიც შეიცავს სერვერის ვერსიას და ვირტუალურ ჰოსტის სახელს, რომელიც უნდა დაემატოს სერვერის მიერ გენერირებულ გვერდებს, თუ ჩართულია."PATH_TRANSLATED" ფაილური სისტემა- (არა დოკუმენტის root-) დაფუძნებული გზა მიმდინარე სკრიპტისკენ, მას შემდეგ, რაც სერვერი შეასრულებს ვირტუალურ-რეალურ რუკებს.

კომენტარი: PHP 4.3.2-ის მდგომარეობით, PATH_TRANSLATED ცვლადი აღარ არის ნაგულისხმევად დაყენებული Apache 2 SAPI-ში, ვიდრე Apache ვერსია 1, სადაც ის დაყენებულია იმავე მნიშვნელობაზე, როგორც SCRIPT_FILENAME, როდესაც არ გამოიყენება Apache-ს მიერ. ეს ცვლილება განხორციელდა CGI სპეციფიკაციის შესასრულებლად, სადაც PATH_TRANSLATED ცვლადი უნდა არსებობდეს მხოლოდ მაშინ, როდესაც PATH_INFO არის განსაზღვრული. Apache 2 მომხმარებლებს შეუძლიათ გამოიყენონ დირექტივა AcceptPathInfo = ჩართულია httpd.conf კონფიგურაციის ფაილში PATH_INFO ცვლადის დასაყენებლად.

"SCRIPT_NAME" შეიცავს მიმდინარე სკრიპტის გზას. ეს სასარგებლოა იმ გვერდებისთვის, რომლებიც უნდა მიუთითონ საკუთარ თავზე. მუდმივი __FILE__შეიცავს მიმდინარე (ანუ ჩართული) ფაილის სრულ გზას და სახელს."REQUEST_URI" URI, რომელიც გადაეცა ამ გვერდზე შესასვლელად. Მაგალითად, " /index.html". "PHP_AUTH_DIGEST" HTTP Digest ავთენტიფიკაციის შესრულებისას, ეს ცვლადი დაყენებულია კლიენტის მიერ გამოგზავნილ „ავტორიზაციის“ სათაურზე (რომელიც შემდეგ უნდა იქნას გამოყენებული შესაბამისი ვალიდაციისთვის)."PHP_AUTH_USER" როდესაც შესრულებულია HTTP ავტორიზაცია, ეს ცვლადი დაყენებულია მომხმარებლის მიერ მოწოდებულ მომხმარებლის სახელზე."PHP_AUTH_PW" როდესაც HTTP ავტორიზაცია ხორციელდება, ეს ცვლადი დაყენებულია მომხმარებლის მიერ მოწოდებულ პაროლზე."AUTH_TYPE" როდესაც შესრულებულია HTTP ავტორიზაცია, ეს ცვლადი დაყენებულია ავთენტიფიკაციის ტიპზე, რომელიც გამოიყენება."PATH_INFO" შეიცავს მომხმარებლის მიერ მოწოდებულ ნებისმიერ ბილიკს სკრიპტის სახელის შემდეგ, მაგრამ მოთხოვნის სტრიქონამდე, თუ ეს შესაძლებელია. მაგალითად, თუ მიმდინარე სკრიპტი მოთხოვნილია URL-ზე http://www.example.com/php/path_info.php/some/stuff?foo=bar , მაშინ $_SERVER["PATH_INFO"] ცვლადი შეიცავს /ზოგიერთი რაღაც?>

ამ მაგალითის გაშვების შედეგი იქნება დაახლოებით ასეთი.

თუ შეამჩნევთ შეცდომას, აირჩიეთ ტექსტის ნაწილი და დააჭირეთ Ctrl + Enter
გააზიარე:
სამშენებლო პორტალი - კარები და კარიბჭე.  ინტერიერი.  კანალიზაცია.  მასალები.  ავეჯი.  სიახლეები