PHP / Superglobal хувьсагчид

Superglobal хувьсагчид

PHP-д зарим тусгай хувьсагчид байдаг — тэдгээрийг superglobal гэж нэрлэдэг. Эдгээр хувьсагчид програмын аль ч хэсгээс, функц дотроос ч, файл даяар ч шууд хандах боломжтой. global гэсэн түлхүүр үг хэрэглэх шаардлагагүй. PHP нь дараах superglobal хувьсагчидтай: $_GET, $_POST, $_REQUEST, $_SESSION, $_COOKIE, $_FILES, $_SERVER, $_ENV, $GLOBALS.

$_SERVER — серверийн мэдээлэл

$_SERVER нь серверийн болон HTTP хүсэлтийн мэдээллийг агуулдаг массив юм. Хамгийн түгээмэл хэрэглэгддэг утгуудыг харцгаая:

php
<?php
// Хэрэглэгчийн IP хаяг
echo $_SERVER['REMOTE_ADDR'];      // жишээ: 192.168.1.1

// Одоогийн файлын нэр
echo $_SERVER['PHP_SELF'];         // жишээ: /index.php

// HTTP хүсэлтийн арга (GET эсвэл POST)
echo $_SERVER['REQUEST_METHOD'];   // GET эсвэл POST

// Хөтчийн нэр
echo $_SERVER['HTTP_USER_AGENT'];  // Chrome, Firefox гэх мэт

// Серверийн нэр
echo $_SERVER['SERVER_NAME'];      // жишээ: localhost
?>

$_SERVER ашиглан хэрэглэгч хэрхэн, хаанаас хандаж байгааг мэдэж болдог — энэ нь аюулгүй байдлын шалгалт хийхэд маш хэрэгтэй.

$_GET ба $_POST

Эдгээр хоёр superglobal нь маягтаас ирсэн өгөгдлийг агуулдаг.

$_GET — URL-д дамжуулсан өгөгдлийг уншина:

php
<?php
// URL: /search.php?q=PHP&lang=mn
echo $_GET['q'];     // PHP
echo $_GET['lang'];  // mn

// Утга байгаа эсэхийг шалгаад дараа ашиглах
if (isset($_GET['q'])) {
    $query = $_GET['q'];
    echo "Хайлт: " . $query;
}
?>

$_POST — маягтаас POST аргаар ирсэн өгөгдлийг уншина:

php
<?php
// HTML маягт POST-оор илгээсэн гэж үзье
if (isset($_POST['ner'])) {
    $ner = $_POST['ner'];
    echo "Сайн уу, " . $ner . "!";
}
?>

$GLOBALS — бүх глобал хувьсагч

$GLOBALS нь скриптийн бүх глобал хувьсагчийг нэг дор агуулдаг. Функц дотроос гадны хувьсагчид хандахад ашигладаг:

php
<?php
$нэр = "Болд";
$нас = 25;

function мэнд() {
    // Функц дотор глобал хувьсагчид хандана
    echo $GLOBALS['нэр'] . " — " . $GLOBALS['нас'] . " настай";
}

мэнд(); // Болд — 25 настай
?>

$_REQUEST — нийлмэл superglobal

$_REQUEST нь $_GET, $_POST, $_COOKIE гурвын өгөгдлийг нэгтгэн агуулдаг. Аль аргаар ирсэн өгөгдлийг ялгахгүй уншихад тохиромжтой:

php
<?php
// GET эсвэл POST аль аргаар ирсэн ч уншина
if (isset($_REQUEST['утга'])) {
    echo $_REQUEST['утга'];
}
?>

Гэхдээ аюулгүй байдлын үүднээс $_GET ба $_POST-г тусад нь хэрэглэх нь илүү зөв байдаг.

$_SESSION нь хэрэглэгчийн мэдээллийг серверт хадгалдаг, $_COOKIE нь хэрэглэгчийн браузерт хадгалдаг. Эдгээрийг 31-р болон 32-р хичээлүүдэд дэлгэрэнгүй судална.

php
<?php
session_start(); // Session ашиглахын өмнө заавал дуудна

$_SESSION['хэрэглэгч'] = "Болд";
echo $_SESSION['хэрэглэгч']; // Болд
?>

Дараагийн хичээлд:

Superglobal-уудын хамгийн чухал хэрэглээ болох маягтын өгөгдөл дамжуулалтыг судална. $_GET ба $_POST ашиглан HTML маягтаас PHP руу өгөгдөл хэрхэн дамжуулахыг бүрэн жишээгээр үзнэ.