متغیرهای سوپر گلوبال‌ در PHP

منتشر شده در 17 آوریل 2020 آخرین به روز رسانی در 02 دسامبر 2020
مهندس محسن صادق نژاد
1914 0
متغیر سوپر گلوبال‌ در php

این پست با مسیر متخصص php مرتبط است. مشاهده مسیر (Roadmap)

قبلا در مقاله ای در مورد متغیر های PHP صحبت کردیم و با آنها آشنا شدیم، اکنون می خواهیم بصورت اختصاصی در مورد متغیر سوپر گلوبال‌ php و (Superglobal)، که در واقع متغیرهای از پیش تعریف شده ای هستند صحبت کنیم؛ که صرف‌ نظر از محدوده یا قلمرو، همیشه می توان در هر تابع، کلاس یا فایلی به آنها دسترسی داشته باشید، و آنها را فراخوانی نمود و در کدنویسی از آنها استفاده کرد.

این متغیرهای فوق جهانی به شرح زیر می باشند:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

در این آموزش به توضیح مهمترین آنها می‌ پردازیم.

Superglobal
متغیر سوپر گلوبال‌ در PHP

متغیر $GLOBALS

اولین متغیر سوپرگلوبال PHP که بررسی می کنیم متغیر $GLOBALS است، که برای دسترسی به متغیرهای سراسری یا  global در هر جای برنامه اعم از داخل توابع و یا کلاس ها و … استفاده می شود.

در زبان PHP تمامی متغیرهای گلوبال را در متغیری به نام [GLOBALS[‘$index’$ نگهداری می کند. که index$ حاوی نام متغیر می‌باشد. مثال زیر را ببینید :

<?php
$x = 5;
 
function explain()
 {
    echo $GLOBALS['x'] =10;
}
explain();
?>

متغیر x که به‌ عنوان یک متغیر سراسری در ابتدا تعریف شده است، و امکان استفاده از آن در تابع را نداریم. اما در بدنه‌ی تابع با کمک سوپر گلوبال ها از متغیر x استفاده کردیم، و در صورت اجرای کد بالا مقدار 10 در خروجی به کاربر نمایش داده می‌شود.

متغیر $_SERVER

دومین متغیر superglobal که بررسی می‌ کنیم متغیر $_SERVER می‌باشد. این متغیر اطلاعاتی مانند اسکریپت و آدرس IP میزبان و نام سرور و مسیرها و محل دستورها و … را در خود نگهداری و ذخیره می‌کند.

نحوه استفاده از این متغیر به شکل زیر است. توجه داشته باشید این متغیر اطلاعات مختلفی را می‌تواند در خود ذخیره بکند؛ در ادامه به شرح بعضی از آنها می پردازیم:

نام سرور به شما نشان داده خواهد شد. echo $_SERVER[‘SERVER_NAME’];
آدرس IP سرور میزبان نمایش داده خواهد شد. echo $_SERVER[‘SERVER_ADDR’];
زمان شروع درخواست بازگردانی و نمایش داده خواهد شد. echo $_SERVER[‘REQUEST_TIME’];
نام اسکریپتی که در حال اجرا می‌باشد نمایش داده می‌شود. echo $_SERVER[‘PHP_SELF’];
اطلاعات مرورگر و سیستم عامل و … را نمایش خواهد داد. echo $_SERVER[‘HTTP_USER_AGENT’];

متغیر $_REQUEST

سومین متغیر superglobal که دربارش صحبت می‌ کنیم متغیر $_REQUEST می‌ باشد. این متغیر برای جمع‌آوری اطلاعاتی که کاربر در فرم‌ های HTML وارد و یا submit می‌ کند استفاده می‌ شود.

مثال زیر یک فرم با یک قسمت ورودی و یک دکمه ارسال را نشان می دهد. هنگامی که یک کاربر با کلیک بر روی “ارسال” داده را ارسال می کند، داده های فرم به پرونده مشخص شده در ویژگی عملکرد برچسب <form> ارسال می شوند. در این مثال، ما برای پردازش داده های فرم به خود این فایل اشاره می کنیم. اگر می خواهید از یک فایل PHP دیگر برای پردازش داده های فرم استفاده کنید، آن را با نام پرونده مورد نظر خود جایگزین کنید. سپس می توانیم از متغیر سوپرگلوبال $_REQUEST  برای جمع آوری مقدار قسمت ورودی استفاده کنیم:

در مثال زیر شما یک فرم با یک قسمت ورود اطلاعات و یک دکمه ارسال را مشاهده می‌کنید. هنگامی که یک کاربر با کلیک بر روی “submit” اطلاعات را ارسال می کند، اطلاعات فرم به فایل مشخص شده در تگ <form> ارسال می شوند. در اینجا با ایجاد فایل دیگری به نام welcome.php اطلاعات را در آنجا ذخیره می‌ کنیم. سپس می توانیم از متغیر سوپرگلوبال $_REQUEST برای جمع آوری مقدار قسمت ورودی استفاده کنیم:

<html>
<body>

<form method="post" action="welcome.php">
  Name: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   
    $name = $_REQUEST['fname'];12:
    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo $name;
    }
}
?>

</body>
</html>

همانطور که مشاهده می‌کنید، در خط دوازدهم این کد نحوه جمع آوری اطلاعات با استفاده از متغیر $_REQUEST مشخص شده است. در ادامه شما می توانید از متغیرهای $_GET و  $_POST نیز استفاده بنمایید.

متغیر $_POST

چهارمین متغیری که به بررسی اون می‌ پردازیم متغیر $_POST می‌باشد. کاربرد این متغیر در فرم ها می‌باشد، و متغیر هایی که method آنها post تعریف شده باشند؛ با استفاده از این متغیر ذخیره خواهند شد. هدف اصلی این متغیر و متغیر $_GET ذخیره اطلاعات و امکان استفاده از آنها در صفحات دیگر است.

این متغیر به گونه ای طراحی شده است، که اطلاعات ارسال شده توسط دیگران قابل مشاهده نباشد. این متغیر در بسیاری از فرم ها  کاربرد دارد. در ادامه با ساختن یک فرم ساده به بررسی بیشتر این متغیر می‌ پردازیم.

<form action="welcome.php" method="post">
   Name: <input type="text" name="firstName">
   Age:  <input type="text" name="Age" >
         <input type="submit" >
</form>

اطلاعات این فرم پس از زدن دکمه submit به فایل welcome.php ارسال خواهد شد. پس از کلیک بر روی دکمه submit نوار URL به شکل زیر به نمایش در خواهد آمد.

Localhost/welcome.php/

در متد POST اطلاعات در URL نمایش داده نمی شود، ولی می توان با قرار دادن این کد در قسمت کدهای php پروژمون؛ اطلاعات ذخیره شده را مشاهده کرد.

<?php
echo $_POST["firstName"];
?>

متغیر $_GET

متغیر $_GET نیز کاربردی شبیه متغیر $_POST دارد، و هدف آن ذخیره اطلاعات یک فرم و استفاده از آن در صفحات دیگر می‌ باشد.

اطلاعاتی که توسط متغیر $_GET ذخیره می‌ شود قابل مشاهده برای دیگران است، و دیگر کاربران می توانند این اطلاعات را در نوار URL  مشاهده کنند؛ به همین دلیل یکسری محدودیت هایی در ارسال اطلاعات وجود خواهد داشت.

<form action="welcome.php" method="get">
   Name: <input type="text" name="firstName" >
   Age:  <input type="text" name="Age" >
         <input type="submit" >
</form>

اطلاعات این فرم پس از زدن دکمه submit به فایل welcome.php ارسال خواهد شد. پس از کلیک بر روی دکمه submit نوار URL با توجه به اطلاعاتی که کاربر در فرم وارد کرده است به شکل زیر به نمایش در خواهد آمد.

Localhost/ welcome.php?firstName=Mohsen&Age=28

همانطور که مشاهده می کنید، این اطلاعات برای سایرین نیز قابل مشاهده خواهد بود. بنابرین باید توجه بکنید که اطلاعات حساس را با استفاده از این متد ارسال و ذخیره نکنید. در عوض به دلیل اینکه متغیرها و مقادیر آنها در نوار URL نمایش داده می شوند، می توان از آن جهت نمایش نام کاربری و یا سایر اطلاعاتی که اهمیت چندانی ندارند، در دیگر صفحات سایت استفاده کرد.

به پایان آموزش “متغیر سوپر گلوبال‌ در php” و (Superglobal) رسیدیم. چنانچه ابهام و اشکالی داشتید، می توانید در بخش نظرات مطرح نمایید.