• Գլխավոր
  • Լուրեր
    • Առողջապահություն
    • Անվտանգություն
    • Արհեստական Ինտելեկտ
    • Էկոլոգիա
    • Մեքենաշինություն
    • Ռոբոտաշինություն
    • Համացանց
    • Համակարգիչ
    • Սմարթֆոն
    • Սոցցանց
    • Google
    • Microsoft
    • Hi-Tech
  • Վեբ
    • PHP
    • HTML
      • HTML5
    • CSS
      • CSS3
    • JavaScript
      • jQuery
    • WordPress
  • SQL
  • Թեստեր
    • PHP
    • MySQL
    • HTML
    • JavaScript
    • CSS
  • Ֆորում
  • Հետադարձ կապ
IT-Blog.am
Տեղեկատվական տեխնոլոգիաների պորտալ
  • Գլխավոր
  • Լուրեր
    • Առողջապահություն
    • Անվտանգություն
    • Արհեստական Ինտելեկտ
    • Էկոլոգիա
    • Մեքենաշինություն
    • Ռոբոտաշինություն
    • Համացանց
    • Համակարգիչ
    • Սմարթֆոն
    • Սոցցանց
    • Google
    • Microsoft
    • Hi-Tech
  • Վեբ
    • PHP
    • HTML
      • HTML5
    • CSS
      • CSS3
    • JavaScript
      • jQuery
    • WordPress
  • SQL
  • Թեստեր
    • PHP
    • MySQL
    • HTML
    • JavaScript
    • CSS
  • Ֆորում
  • Հետադարձ կապ
Գլխավոր  /  PHP • Web  /  Սուպերգլոբալ փոփոխականներ (superglobals)
24 Մարտի 2016

Սուպերգլոբալ փոփոխականներ (superglobals)

Հեղինակ Տարոն
PHP, Web

Ողջույն հարգելի ընթերցողներ։ Այսօր մենք կծանոթանանք PHP լեզվի սուպերգլոբալ փոփոխականների հետ (superglobals)։

Դրանք նախապես հայտարարված փոփոխականներ են, որոնք տեսանելի են PHP կոդի ցանկացած հատվածում, այսինքն ֆունկցիաների և մեթոդների մեջ դրանց հասանելիություն ստանալու համար պետք չէ գրել global $variable, այլ պետք է ուղղակի կանչել սուպերգլոբալը(օրինակ՝ $_POST)։

Սուպերգլոբալներն իրենցից ներկայացնում են ասոցիատիվ զանգվածներ (associative array)։ Դրանք հայտնվել են PHP լեզվում 4.1.0 տարբերակից (version)։

Սուպերգլոբալներն են․

$GLOBALS

$_SERVER

$_GET

$_POST

$_FILES

$_COOKIE

$_SESSION

$_REQUEST

$_ENV

 

$GLOBALS

$GLOBALS-ը ասոցիատիվ զանգված է, որում առկա են բոլոր գլոբալ տեսանելիության տիրույթի փոփոխականների հղումները։ Փոփոխականների անունները հանդիսանում են զանգվածի բանալիներ (key)։ Երևի արդեն պարզ է, որ այս զանգվածի մեջ առկա են նաև մյուս սուպերգլոբալները, որոնք հանդիսանում են այս զանգվածին ներդրված զանգվածներ (օրինակ՝ $GLOBALS[‘_GET’])։

Ի տարբերություն մյուս սուպերգլոբալների՝ այս սուպերգլոբալը միշտ հասանելի է (մյուս սուպերգլոբալների հասանելիության սահմանափակումների մասին կխոսենք դրանցից յուրաքանչյուրի քննարկման ժամանակ)։

Որպեսզի ավելի լավ պատկերացնենք վերը նշվածը ստեղծենք index-globals.php ֆայլ և նրանում գրենք հետևյալ կոդը․

<?php
function test() {
	$variable = 'Local variable';
	echo 'from $GLOBALS array - ' . $GLOBALS['variable'] . '<br />';
	echo 'local variable $variable - ' . $variable;
}
$variable = 'Global variable';
test();
?>

Եթե գործարկենք այս կոդը, ապա կունենանք հետևյալ արդյունքը․

from $GLOBALS array - Global variable
local variable $variable - Local variable

Այստեղ տեսնում ենք, որ $GLOBALS-ում variable անվամբ պահվում է ոչ թե ֆունկցիայի մարմնում գրված փոփոխականը, այլ դրսում նույն անունով հայտարարված փոփոխականը։ Դրա պատճառն այն է, որ ֆունկցիայի մարմնում հայտարարված փոփոխականները չեն գտնվում գլոբալ տեսանելիության տիրույթում։

$_SERVER

Այս սուպերգլոբալը զանգված է, որում առկա են տվյալներ կոդերի, դրանց վայրի և վերնագրերի մասին։ Սրանում տվյալները ստեղծում է վեբ-սերվերը և կախված դրանից որոշ տվյալներ կարող են բացակայել։

Ես կներկայացնեմ այս զանգվածում առկա տվյալներից մի քանիսը։ Եթե Դուք հարցեր ունենաք մյուս տվյալների հետ կապված՝ կարող եք դիմել մեզ։

Այսպիսով՝ այդ տվյալներից են․

  • PHP_SELF — ցույց է տալիս այն ֆայլի անունը, որը տվյալ պահին գործարկված է (ֆայլի գտնվելու վայրը չի պահվում ամբողջությամբ, օրինակ, եթե ֆայլը, որը գործարկված է, ունի հետևյալ հասցեն՝ http://it-blog.am/dir/file.php, ապա $_SERVER[‘PHP_SELF’]-ը կվերադարձնի /dir/file.php),
  • SERVER_ADDR — ցույց է տալիս այն սերվերի IP հասցեն, որի վրա գործարկված է տվյալ ֆայլը,
  • REQUEST_METHOD — ցույց է տալիս, թե ինչ մեթոդով է կատարվել հարցումը (օրինակ POST, GET)։

Եթե ուզում եք տեսնել զանգվածի պարունակությունը, ապա ավելացրեք հետևյալ կոդի մասը Ձեր կոդի մեջ․

var_dump($_SERVER)

$_GET

Այս սուպերգլոբալը զանգված է, որի մեջ առկա են HTTP հարցման բոլոր GET մեթոդով փոխանցված փոփոխականները։

Օրինակ, եթե հղումն ունի հետևյալ տեսքը՝

http://it-blog.am?name=hello

ապա $_GET[‘name’] կանչելուց կունենանք hello արտահայտությունը։

Եկեք մի փոքր օրնակի վրա դիտարկենք ասվածը․ վերցնենք երկու ֆայլ՝ index-get.html և index-get.php: Առաջին ֆայլում կառուցենք հասարակ form, որը բաղկացած կլինի երկու input-ներից և տվյալները կուղարկի երկրորդ ֆայլին (պարզ է, որ տվյալները ուղարկելու ենք GET մեթոդով)։ Երկրորդ ֆայլում ուղղակի կարտածենք ստացված տվյալները։

Ասվածը իրագործելու համար առաջին ֆայլում գրում ենք հետևյալ կոդը․

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
	</head>
	<body>
		<form action="./index-get.php" method="GET">
			First Name: <input type="text" name="first_name" /><br />
			Last Name: <input type="text" name="last_name" /><br />
			<button type="submit" name="submit">Submit</button>
		</form>
	</body>
</html>

Մի քանի խոսքով ներկայացնեմ form հատկորոշիչում (tag) գրվածը․

              1. action — ցույց է տալիս, թե որ ֆայլին են ուղարկվելու տվյալները
              2. method — ցույց է տալիս, թե ինչ մեթոդով են ուղարկվելու տվյալները
              3. name — այսպես կոչված անուն, որով դիմելու ենք տվյալ դաշտում լրացված արտահայտությանը

Եթե ուշադիր լինենք՝ կտեսնենք, որ դիտարկչի հղման դաշտում՝ հղման վերջից կցվում է ? և ուղարկվող տվյալները, որոնք իրարից առանձնացվում են & նշանով։

Երկրորդ ֆայլում գրում ենք հետևյալը․

<?php
if (isset($_GET['submit'])) {
	echo 'First Name: ' . $_GET['first_name'] . '<br />';
	echo 'Last Name: ' . $_GET['last_name'];
}
?>

Այստեղ ուղղակի ստուգում ենք, եթե սեղմվել է Submit կոճակը (այսինքն ուղարկվել են տվյալները), ապա արտածում ենք տվյալները։

Այս սուպերգլոբալը միշտ հասանելի է, սակայն միշտ չէ, որ նրանում առկա են տվյալներ։ Որպեսզի այն դատարկ չլինի՝ պետք է, որ այդ ֆայլին ուղարկված լինեն տվյալներ GET մեթոդով։

$_POST

Այս սուպերգլոբալը զանգված է, որի մեջ առկա են HTTP հարցման բոլոր POST մեթոդով փոխանցված փոփոխականները։

Ի տարբերություն նախորդ օրինակի, այս դեպքում հարցման ժամանակ տվյալները չեն կցվում հղմանը։

Եկեք դիտարկենք նախորդ օրինակը, միայն այն տարբերությամբ, որ տվյալները կուղարկենք POST մեթոդով և կստանանք $_POST սուպերգլոբալ զանգվածից։

Կրկին ստեղծենք երկու ֆայլեր՝ index-post.html և index-post.php:

Առաջին ֆայլում կգրենք նույնը, ինչ նախորդ օրինակում, միայն method-ը GET-ի փոխարեն գրում ենք POST, իսկ action-ը՝ index-post.php.

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
	</head>
	<body>
		<form action="./index-get.php" method="POST">
			First Name: <input type="text" name="first_name" /><br />
			Last Name: <input type="text" name="last_name" /><br />
			<button type="submit" name="submit">Submit</button>
		</form>
	</body>
</html>

Երկրորդ ֆայլում գրում ենք նույնը, ինչ նախորդ օրինակում, միայն տվյալները պետք է ստանանք ոչ թե $_GET-ից, այլ $_POST-ից․

<?php
if (isset($_POST['submit'])) {
	echo 'First Name: ' . $_POST['first_name'] . '<br />';
	echo 'Last Name: ' . $_POST['last_name'];
}
?>

Մենք տեսնում ենք, որ ստանում ենք նույն արդյունքը, ինչ նախորդ օրինակում։ Եթե հարցումը ուղարկելուց ուշադիր լինենք, ապա կտեսնենք, որ հղմանը ոչինչ չի կցվում։

Այս սուպերգլոբալը միշտ հասանելի է, սակայն միշտ չէ, որ նրանում առկա են տվյալներ։ Որպեսզի այն դատարկ չլինի՝ պետք է, որ այդ ֆայլին ուղարկված լինեն տվյալներ POST մեթոդով։

$_FILES

Այս սուպերգլոբալը զանգված է, որի մեջ առկա են HTTP հարցման POST եղանակով փոխանցված ֆայլերը։

Դիտարկենք նախորդ օրինակը մի փոքր փոփոխությամբ։

Կրկին ստեղծենք երկու ֆայլեր՝ index-files.html և index-files.php:

Ինչպես գիտեք, որպեսզի հարցման ժամանակ ֆայլեր ուղարկենք անհրաժեշտ է form հատկորոշիչին ավելացնել enctype ատրիբուտը, որի արժեքը պետք է լինի multipart/form-data, իսկ հենց ֆայլ ավելացնելու համար պետք է ունենանք input հատկորոշիչ, որի տիպը պետք է լինի file:

Ասվածը կունենա հետևյալ տեսքը․

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
	</head>
	<body>
		<form action="./index-files.php" method="POST" enctype="multipart/form-data">
			First Name: <input type="text" name="first_name" /><br />
			Last Name: <input type="text" name="last_name" /><br />
			Select File: <input type="file" name="file" /><br />
			<button type="submit" name="submit">Submit</button>
		</form>
	</body>
</html>

Երկրորդ ֆայլում գրում ենք հետևյալը․

<?php
if (isset($_POST['submit'])) {
	echo 'First Name: ' . $_POST['first_name'] . '<br />';
	echo 'Last Name: ' . $_POST['last_name'];
}
if (!empty($_FILES)) {
	var_dump($_FILES);
}
?>

Այստեղ վերևում ուղղակի ստուգում ենք, եթե սեղմվել է Submit կոճակը (այսինքն ուղարկվել են տվյալները), ապա արտածում ենք տվյալները, իսկ ներքևում ստուգում ենք, եթե $_FILES զանգվածը դատարկ չէ (այսինքն հարցման ժամանակ ուղարկվել են ֆայլեր), ապա ուղղակի արտածում ենք զանգվածի պարունակությունը։

Այս սուպերգլոբալը միշտ հասանելի է, սակայն միշտ չէ, որ նրանում առկա են տվյալներ։ Որպեսզի այն դատարկ չլինի՝ պետք է, որ այդ ֆայլին ուղարկված լինեն տվյալներ POST մեթոդով և այդ տվյալների մեջ լինի գոնե մեկ ֆայլ։

$_COOKIE

Այս սուպերգլոբալը զանգված է, որի մեջ առկա են HTTP հարցման cookie տվյալները։

Այս սուպերգլոբալը միշտ հասանելի է, սակայն միշտ չէ, որ նրանում առկա են տվյալներ։ Որպեսզի այն դատարկ չլինի՝ պետք է, որ ստեղծված լինեն cookie տվյալներ, որոնք հասանելի են տրված կոդին։ Եթե այդպիսիք կան, ապա կարող եք դրանք տեսնել՝ Ձեր կոդի մեջ ավելացնելով հետևյալ հատվածը․

var_dump($_COOKIE);

$_SESSION

Այս սուպերգլոբալը զանգված է, որի մեջ առկա են տվյալ կոդի համար հասանելի սեսսիայի (session) փոփոխականները։

Այս սուպերգլոբալը միշտ հասանելի է, սակայն միշտ չէ, որ նրանում առկա են տվյալներ։ Որպեսզի այն դատարկ չլինի՝ պետք է, որ ստեղծված լինեն սեսսիայի տվյալներ, որոնք հասանելի են տրված կոդին։ Եթե այդպիսիք կան, ապա կարող եք դրանք տեսնել՝ Ձեր կոդի մեջ ավելացնելով հետևյալ հատվածը․

var_dump($_SESSION)

$_REQUEST

Այս սուպերգլոբալը զանգված է, որի մեջ առկա են HTTP հարցման բոլոր փոփոխականները։

Այն իր մեջ ներառում է $_GET, $_POST և $_COOKIE սուպերգլոբալների տվյալները։

Համոզվելու համար կարող ենք վերցնել $_GET կամ $_POST սուպերգլոբալների քննարկման ժամանակ դիտարկված օրինակները և մի փոքր ձևափոխել։

Կրկին ստեղծենք երկու ֆայլ՝ index-request.html և index-request.php:

Առաջին ֆայլում գրենք վերը նշված օրինակներից որևէ մեկի HTML ֆայլում գրվածը (ես կգրեմ  $_POST-ում քննարկված օրինակի HTML-ը, սակայն Դուք կարող եք վերցնել մյուսը (իհարկե փոխելով action-ը))․

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
	</head>
	<body>
		<form action="./index-request.php" method="POST">
			First Name: <input type="text" name="first_name" /><br />
			Last Name: <input type="text" name="last_name" /><br />
			<button type="submit" name="submit">Submit</button>
		</form>
	</body>
</html>

Երկրորդ ֆայլում գրենք հետևյալը․

<?php
if (isset($_REQUEST['submit'])) {
	echo 'First Name: ' . $_REQUEST['first_name'] . '<br />';
	echo 'Last Name: ' . $_REQUEST['last_name'];
}
?>

Եթե ուշադրություն դարձնենք, ապա կտեսնենք, որ գրված է նույնը, ինչ $_GET-ի և $_POST-ի քննարկման ժամանակ դիտարկված օրինակներում, միայն այն տարբերությամբ, որ $_GET-ի կամ $_POST-ի փոխարեն գրված է $_REQUEST:

Այս սուպերգլոբալը միշտ հասանելի է, սակայն միշտ չէ, որ նրանում առկա են տվյալներ։ Որպեսզի այն դատարկ չլինի՝ պետք է, որ այդ ֆայլին ուղարկված լինեն տվյալներ GET, POST մեթոդներով կամ COOKIE-ով։

Սակայն պետք չէ հույս դնել այս սուպերգլոբալի վրա։ Ավելի լավ է օգտագործեք յուրաքանչյուր դեպքի համար նախատեսված սուպերգլոբալը ($_POST-ը POST մեթոդով եկած տվյալների համար, $_GET-ը՝ GET-ի համար, իսկ $_COOKIE-ն՝ COOKIE-ների համար)։

$_ENV

Այս սուպերգլոբալը զանգված է, որի մեջ առկա են արտաքին միջավայրից կոդին փոխանցված փոփոխականները։

Այդ արժեքները ներմուծվում են PHP-ի անունների գլոբալ տիրույթ արտաքին միջավայրի համակարգային փոփոխականներից, որտեղ գործարկված է PHP-ի վերլուծիչը (parser): Զանգվածի պարունակության ամբողջական և կոնկրետ ցուցակ գոյություն չունի։ Այն պարզելու համար ուսումնասիրեք Ձեր հրամանային տիրույթի մասին փաստաթղթերը։ Պետք է նշեմ, որ այս սուպերգլոբալը շատ քիչ է օգտագործվում։

Որևէ հարց ունենալու դեպքում կարող եք գրել մեկնաբանություններում։

Շնորհակալություն մեր բլոգից օգտվելու համար։

 

Կապված գրառումներ

  • WordPress -ի տեղադրումը .Net -ի վրա

    03/16/2017
  • mysql transaction

    MySQL գործարքի(transaction) կառավարման օպերատորներ

    11/19/2016
  • Class

    Կլասների (classes) գրելաձևը (syntax)

    10/20/2016
Facebook
  • Շատ Դիտված Գրառումներ
  • Նոր գրառումներ
  • Calculator
    Հաշվիչի (calculator) պատրաստում 04/18/2016
  • Recursion
    Ռեկուրսիա (recursion) հասկացությունը 06/02/2016
  • Icon տառատեսակներ 02/21/2016
  • MySQL joins
    MySQL JOINS (MySQL միացումներ) 06/13/2016
  • Սուպերգլոբալ փոփոխականներ (superglobals) 03/24/2016
  • Ի՞նչ է Pi Network-ը և ինչպե՞ս վաստակել Pi 03/27/2020
  • Honda-ն ներկայացրել է մոտոցիկլետ, որն օգտագործում է քամու էներգիա 12/23/2017
  • Նոր 3D-տպիչ սարքը ստեղծում է առարկաներ վայրկյանների ընթացքում 12/22/2017
  • Հետազոտողներն օգտագործում են էլեկտրական հոսանքներ`մարդու հյուսվածքներում քաղցկեղի հայտնաբերման համար 12/18/2017
  • Nvidia ընկերությունը ներկայացրել է երբևէ ստեղծված ամենահզոր գրաֆիկական պրոցեսորը 12/16/2017
  • WordPress -ի տեղադրումը .Net -ի վրա 03/16/2017
  • Class
    Կլասների (classes) գրելաձևը (syntax) 10/20/2016
  • encapsulation
    Ինկապսուլացիա (Encapsulation) 08/17/2016
  • object oriented programming
    Օբյեկտ կողմնորոշված ծրագրավորում (OOP) 07/04/2016
  • Ի՞նչ է Pi Network-ը և ինչպե՞ս վաստակել Pi 03/27/2020
  • Honda-ն ներկայացրել է մոտոցիկլետ, որն օգտագործում է քամու էներգիա 12/23/2017
  • Նոր 3D-տպիչ սարքը ստեղծում է առարկաներ վայրկյանների ընթացքում 12/22/2017
  • mysql transaction
    MySQL գործարքի(transaction) կառավարման օպերատորներ 11/19/2016
  • MySQL Trigger
    MySQL տրիգերներ (Triggers) և իրադարձություններ(Events) 10/04/2016
  • Procedures and Functions
    MySQL ընթացակարգեր (procedures) և ֆունկցիաներ (functions) 08/31/2016
  • MYSQL View
    MySQL ներկայացումներ (VIEWS) 07/16/2016
  • WordPress -ի տեղադրումը .Net -ի վրա 03/16/2017
  • SEO խրվակներ WordPress-ի համար 04/25/2016
  • Ծանոթացում WordPress-ի կառավարակետի հետ (մաս 2) 02/24/2016
  • Ի՞նչ է CMS-ը 02/17/2016
© 2020 թ.  IT-Blog.am Բոլոր հեղինակային իրավունքները պաշտպանված են:

Սույն կայքում տեղադրված նյութերի հեղինակային իրավունքը պատկանում է բացառապես IT-Blog.am կայքի հեղինակներին և կայքում բոլոր հրապարակված նյութերն անհատական օգտագործման համար են։ Այս կայքում  հրապարակված նյութերի (մասնակի կամ ամբողջական) վերահրապարկումը տեղեկատվություն տարածող այլ միջոցներում (բացառությամբ սոցկայքերի) արգելված է։ Խախտում թույլ տված անձինք կենթարկվեն պատասխանատվության` օրենքով սահմանված կարգով։