اذهب إلى المحتوى

المتغيرات ذات النطاق العام العالي (Superglobal Variables) في PHP


سارة محمد2

هي متغيرات مدمجة معرّفة مسبقًا في لغة PHP على أنّها متغيرات ذات نطاق عام عالي، وهذا يعني أنّها متاحة دائمًا في جميع نطاقات السكربت دون الحاجة لتعريفها باستخدام الكلمة المفتاحية global للوصول إليها من داخل الدوال أو التوابع.

شرح المتغيرات ذات النطاق العام العالي

ببساطة هي المتغيرات المتاحة في كل نطاقات ملفات السكربت لديك، وهذا يعني أنّه لا حاجة لتمريرها كمعاملات للدوال أو تخزينها خارج كتلة الشيفرة لتصبح متاحة في مختلف النطاقات.

ما هو المتغير ذو النطاق العام العالي؟

بدءًا من الإصدار 7.1.3 PHP هناك 9 متغيرات ذات نطاق عام عالي وهي:

  • ‎$GLOBALS‎: تشير إلى كل المتغيرات المتاحة في النطاق العام
  • ‎$_SERVER‎: معلومات الخادم وبيئة التنفيذ
  • ‎$_GET: متغيرات طلب HTTP باستخدام GET
  • ‎$_POST: متغيرات طلب HTTP باستخدام POST
  • ‎$_FILES: متغيرات طلب HTTP لتحميل ملف
  • ‎$_COOKIE: ملفات تعريف ارتباط HTTP ‏(HTTP Cookies)
  • ‎$_SESSION: متغيرات الجلسة
  • ‎$_REQUEST: متغيرات طلب HTTP
  • ‎:$_ENV متغيرات البيئة

يمكنك الاطلاع عليها في التوثيق الرسمي

إليك المزيد من المعلومات حول هذه المتغيرات:

‎$GLOBALS

مصفوفة ترابطية (associative array) تحوي مراجعًا لكل المتغيرات المعرّفة في النطاق العام للسكربت، وتمثّل المفاتيح فيها أسماء المتغيرات وقيمة عناصرها هي محتويات تلك المتغيرات.

// تعريف متغير خارج النطاق
$myGlobal = "global";

function test()
{
    // تعريف متغير داخل النطاق
    $myLocal = "local";
    // طباعة كلا المتغيرين
    var_dump($myLocal);
    var_dump($GLOBALS["myGlobal"]);
}

// تنفيذ الدالة
test();
لم يعرّف ضمن النطاق العام $myLocal ‏‎‏فقط بما أنّ $myGlobal ستُطبَع قيمة المتغير
var_dump($myLocal);
var_dump($myGlobal);

خرج الشيفرة السابقة:

string 'local' (length=5)
string 'global' (length=6)
null
string 'global' (length=6)

في المثال السابق لم تُعرض قيمة المتغير ‎$myLocal في المرة الثانية لأنّه معرّف داخل الدالة test‎‎()‎ ودُمِّر بعد إغلاقها.

تعريف متغير عام

هناك طريقتان للتعريف: الطريقة الأولى: استخدام الكلمة المفتاحية global:

function test()
{
    global $myLocal;
    $myLocal = "local";
    var_dump($myLocal);
    var_dump($GLOBALS["myGlobal"]);
}

تسبق الكلمة المفتاحية global اسم المتغير ليصبح جزءًا من النطاق العام، ولا يمكن إسناد قيمة للمتغير في نفس التعليمة التي تعرّفه متغيرًا عامًا لذا أُسندَت القيمة له في سطرٍ منفصلٍ من الشيفرة السابقة، يمكن ذلك فقط في حال كتبت الشيفرة في سطرٍ واحد بالشكل التالي:

global $myLocal; $myLocal = "local";

لكن سيؤثر ذلك بالتأكيد على أناقة الشيفرة.

الطريقة الثانية: مصفوفة ‎$GLOBALS:

function test()
{
    $GLOBALS["myLocal"] = "local";
    $myLocal = $GLOBALS["myLocal"];
    var_dump($myLocal);
    var_dump($GLOBALS["myGlobal"]);
}

في هذا المثال أعدت إسناد القيمة ["‎$GLOBAL["myLocal للمتغير ‎$myLocal إذ وجدت أن كتابة اسم المتغير أسهل من كتابة المصفوفة الترابطية.

‎$_SERVER

‎$_SERVER هي مصفوفة تتضمن معلومات مثل الترويسات والمسارات وأماكن وجود السكربت. ينشئ خادم الويب مداخل هذه المصفوفة لكن ليس هناك ما يضمن أن خادم الويب سيزودنا بهذه المعلومات فقد يحذف خادم الويب بعضها أو قد يزودنا بمعلومات إضافية، يمكنك الاطلاع على جميع المتغيرات المتوقعة هنا.

إليك مثال خرج يمكن أن يكون كالتالي (يمكنك تشغيله عبر جهاز بنظام تشغيل ويندوز على الخادم WAMP):

C:\wamp64\www\test.php:2:
array (size=36)
    'HTTP_HOST' => string 'localhost' (length=9)
    'HTTP_CONNECTION' => string 'keep-alive' (length=10)
    'HTTP_CACHE_CONTROL' => string 'max-age=0' (length=9)
    'HTTP_UPGRADE_INSECURE_REQUESTS' => string '1' (length=1)
    'HTTP_USER_AGENT' => string 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/57.0.2987.133 Safari/537.36' (length=110)
    'HTTP_ACCEPT' => string
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' (length=74)
    'HTTP_ACCEPT_ENCODING' => string 'gzip, deflate, sdch, br' (length=23)
    'HTTP_ACCEPT_LANGUAGE' => string 'en-US,en;q=0.8,en-GB;q=0.6' (length=26)
    'HTTP_COOKIE' => string 'PHPSESSID=0gslnvgsci371ete9hg7k9ivc6' (length=36)
    'PATH' => string 'C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files
(x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS
Client\;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\Program Files\ATI Technologies\ATI.ACE\Core-
Static;E:\Program Files\AMD\ATI.ACE\Core-Static;C:\Program Files (x86)\AMD\ATI.ACE\Core-
Static;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Intel\Intel(R)
Managemen'... (length=1169)
    'SystemRoot' => string 'C:\WINDOWS' (length=10)
    'COMSPEC' => string 'C:\WINDOWS\system32\cmd.exe' (length=27)
    'PATHEXT' => string '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY' (length=57)
    'WINDIR' => string 'C:\WINDOWS' (length=10)
    'SERVER_SIGNATURE' => string '<address>Apache/2.4.23 (Win64) PHP/7.0.10 Server at localhost
Port 80</address>' (length=80)
    'SERVER_SOFTWARE' => string 'Apache/2.4.23 (Win64) PHP/7.0.10' (length=32)
    'SERVER_NAME' => string 'localhost' (length=9)
    'SERVER_ADDR' => string '::1' (length=3)
    'SERVER_PORT' => string '80' (length=2)
    'REMOTE_ADDR' => string '::1' (length=3)
    'DOCUMENT_ROOT' => string 'C:/wamp64/www' (length=13)
    'REQUEST_SCHEME' => string 'http' (length=4)
    'CONTEXT_PREFIX' => string '' (length=0)
    'CONTEXT_DOCUMENT_ROOT' => string 'C:/wamp64/www' (length=13)
    'SERVER_ADMIN' => string 'wampserver@wampserver.invalid' (length=29)
    'SCRIPT_FILENAME' => string 'C:/wamp64/www/test.php' (length=26)
    'REMOTE_PORT' => string '5359' (length=4)
    'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
    'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
    'REQUEST_METHOD' => string 'GET' (length=3)
    'QUERY_STRING' => string '' (length=0)
    'REQUEST_URI' => string '/test.php' (length=13)
    'SCRIPT_NAME' => string '/test.php' (length=13)
    'PHP_SELF' => string '/test.php' (length=13)
    'REQUEST_TIME_FLOAT' => float 1491068771.413
    'REQUEST_TIME' => int 1491068771

هناك الكثير من الأشياء التي يمكن أن نتحدث عنها لكن سنختار الأهم من بينها، يمكنك الاطلاع عليها كلها من خلال قسم الفهارس من التوثيق.

لنوضح بعضها نفرض أنّ لدينا الرابط التالي http://www.example.com/index.php

  • HTTP_HOST: عنوان المضيف، يرجع www.example.com.
  • HTTP_USER_AGENT: محتويات وكيل المستخدم (user agent)، عبارة عن سلسلة نصية تحوي كل معلومات متصفح العميل (client's browser) بما في ذلك نظام التشغيل.
  • HTTP_COOKIE: جميع ملفات تعريف الارتباط (cookies) في سلسلة متسلسلة يفصل بين عناصرها فاصلة منقوطة.
  • SERVER_ADDR: عنوان IP الخادم الذي ينفذ السكربت، يرجع القيمة 93.184.216.34.
  • PHP_SELF: اسم ملف السكربت المنفّذ حاليًا نسبةً إلى المستند الجذر، يرجع في حالتنا القيمة /index.php.
  • REQUEST_TIME_FLOAT: الختم الزمني (timestamp) لبداية الطلب بدقة أجزاء الثانية، متاح من الإصدار PHP 5.4.0.
  • REQUEST_TIME: الختم الزمني لبداية الطلب، متاح من الإصدار PHP 5.1.0.

‎:$_GET

مصفوفة ترابطية من المتغيرات الممررة عبر معاملات الرابط إلى السكربت الحالي، أي ما يأتي بعد ? في الرابط.

بفرض لدينا الرابط http://www.example.com/index.php?myVar=myVal، يمكننا الحصول من الرابط على قيمة ‎$_GET["myVar"]‎ وستكون النتيجة هي myVal، يمكننا التعبير عن ذلك بالشيفرة التالية:

// URL = http://www.example.com/index.php?myVar=myVal
echo $_GET["myVar"] == "myVal" ? "true" : "false"; // true

يستخدم المثال السابق العامل الثلاثي (ternary operator)، ويبيّن كيفية الوصول للقيمة من الرابط باستخدام المتغير ذو النطاق العام العالي ‎$_GET.

إليك مثال آخر:

// URL = http://www.example.com/index.php?myVar=myVal&myVar2=myVal2
echo $_GET["myVar"]; // "myVal"
echo $_GET["myVar2"]; // "myVal2"

يمكن إرسال عدة متغيرات عبر الرابط ويُفصل بينها بالمحرف (&).

الخطر الأمني

من المهم جدًا عدم إرسال معلومات حساسة عبر الرابط لأنها تبقى في سجل الحاسوب وستكون مرئية لأي شخص يمكنه الوصول للمتصفح.

‎$_POST

مصفوفة ترابطية من المتغيرات الممررة للسكربت الحالي بطريقة HTTP POST عند استخدام نوع المحتوى (Content-Type) لطلب HTTP ‏application/x-www-form-urlencoded أو multipart/form-data، وتشبه مصفوفة ‎$_GET أنّ البيانات ممررة من مكان لآخر.

سنبدأ فورًا بمثال (تجاهلت الخاصيّة attribute حتى تُرسل المعلومات إلى نفس صفحة النموذج).

<form method="POST">
    <input type="text" name="myVar" value="myVal" />
    <input type="submit" name="submit" value="Submit" />
</form>

في الأعلى شكل أساسي لنموذج إرسال البيانات، إنّ عدم وجود الخاصيّة value في التطبيق الحقيقي يعني أنّ النموذج سيكون فارغًا، أما وجودها سيرسل المعلومات المُدخلة من قِبل المستخدم.

echo $_POST["myVar"]); // "myVal"

الخطر الأمني

إنّ إسال البيانات باستخدام POST ليس آمنًا دائمًا، يجب استخدام HTTPS لضمان أمن المعلومات بشكلٍ أكبر.

‎$_FILES

مصفوفة ترابطية من العناصر المحمّلة إلى السكربت الحالي بطريقة HTTP POST، بنية هذه المصفوفة مبينة هنا.

لنبدأ مع نموذج أساسي:

<form method="POST" enctype="multipart/form-data">
    <input type="file" name="myVar" />
    <input type="submit" name="Submit" />
</form>

لاحظ أنّني تجاهلت خاصيّة action أيضًا (لنفس السبب السابق)، وأضفت enctype="multipart/form-data"‎ وهذا ضروري لأيّ نموذج يتعامل مع تحميل الملفات.

// التأكد من عدم وجود خطأ
if ($_FILES["myVar"]["error"] == UPLOAD_ERR_OK)
{
    $folderLocation = "myFiles"; 
    // مثلًا "path/to/file" مسار منسوب يمكن أن يكون

    // إذا لم يوجد المجلد المطلوب أنشئه
    if (!file_exists($folderLocation)) mkdir($folderLocation);

    // انقل الملف داخل المجلد
    move_uploaded_file($_FILES["myVar"]["tmp_name"], "$folderLocation/" .
    basename($_FILES["myVar"]["name"]));
}

يُستخدم هذا لتحميل ملف واحد، يوجد الخاصيّة multiple تساعدك في تحميل أكثر من ملف.

إليك مثال لإرسال نموذج بعدة ملفات:

<form method="POST" enctype="multipart/form-data">
    <input type="file" name="myVar[]" multiple="multiple" />
    <input type="submit" name="Submit" />
</form>

لاحظ أنّ التغييرات قليلة جدًا:

  • خاصيّة name للحقل input لها أقواس معقوفة []. ذلك لأنّه نريد إخبار النموذج أنّه لدينا مصفوفة ملفات مُختارة لإرسالها وتجاهل هذه الأقواس سيؤدي لإرسال الملف الأخير فقط إلى ‎$_FILES["myVar"]‎.
  • الخاصيّة multiple="multiple"‎، تُخبر المتصفح أنّه يمكن للمستخدم اختيار أكثر من ملف.
// حساب عدد الملفات المُرسلة
$total = isset($_FILES["myVar"]) ? count($_FILES["myVar"]["name"]) : 0;

// تكرار لكل ملف من الملفات
for ($i = 0; $i < $total; $i++)
{
    // إذا لم يوجد خطأ
    if ($_FILES["myVar"]["error"][$i] == UPLOAD_ERR_OK)
    {
        // مثلًا "path/to/file" مسار منسوب يمكن أن يكون
        $folderLocation = "myFiles";

        // إذا لم يوجد المجلد أنشئه
        if (!file_exists($folderLocation)) mkdir($folderLocation);

        // انقل الملف إلى المجلد
        move_uploaded_file($_FILES["myVar"]["tmp_name"][$i], "$folderLocation/" .
basename($_FILES["myVar"]["name"][$i]));
    }

    // وإلّا أخبر عن الخطأ
    else switch ($_FILES["myVar"]["error"][$i])
    {
        case UPLOAD_ERR_INI_SIZE:
            echo "Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.";
            break;
        case UPLOAD_ERR_FORM_SIZE:
            echo "Value: 2; The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
            break;
        case UPLOAD_ERR_PARTIAL:
            echo "Value: 3; The uploaded file was only partially uploaded.";
            break;
        case UPLOAD_ERR_NO_FILE:
            echo "Value: 4; No file was uploaded.";
            break;
        case UPLOAD_ERR_NO_TMP_DIR:
            echo "Value: 6; Missing a temporary folder. Introduced in PHP 5.0.3.";
            break;
        case UPLOAD_ERR_CANT_WRITE:
            echo "Value: 7; Failed to write file to disk. Introduced in PHP 5.1.0.";
            break;
        case UPLOAD_ERR_EXTENSION:
            echo "Value: 8; A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with phpinfo() may help. Introduced in PHP 5.2.0.";
            break;

        default:
            echo "An unknown error has occurred.";
            break;
    }
}

هذا مثال بسيط جدًا ولا يعالج مشاكل مثل امتدادات الملفات الغير مسموح بها أو الملفات المسمّاة بأسماء شيفرة PHP (مثل ما يعادل حقن SQL في PHP).

الخطوة الأولى هي التأكد من وجود ملفات وإذا وجدت أسند عددهم للمتغير ‎$total. ثم نستخدم الحلقة for للمرور على عناصر المصفوفة ‎$_FILES الواحد تلو الآخر، عند كل ملف إذا لم يواجه مشاكل عندها تكون نتيجة الشرط if هي true ويُحمّل الملف، أما إذا وجدت مشكلة ما تُنفّذ الكتلة switch ويتم إخبارنا بالخطأ الحاصل الذي أوقف عملية تحميل هذا الملف.

‎$_COOKIE

مصفوفة ترابطية من المتغيرات الممررة للسكربت الحالي باستخدام ملفات تعريف ارتباط HTTP (‏HTTP Cookies‏‏‏)‏.

ملفات تعريف الارتباط هي متغيرات تحوي بيانات وتخزّن في حاسوب العميل، وعلى عكس المتغيرات ذات النطاق العام العالي فإنّه يجب إنشاؤها مع وظيفة (وليس إسناد قيمة لها)، إليك المثال التالي:

setcookie("myVar", "myVal", time() + 3600);

في المثال السابق حُدِّد اسم ملف تعريف الارتباط ("myVar")، وإعطاء قيمة له ("myVal")، ويمكن تمرير متغير لإسناد قيمته لملف تعريف الارتباط، ثم وقت انتهاء الصلاحية (في مثالنا هو ساعة بما أنّ 3600 ثانية تعادل ساعة).

يمكن الوصول إلى ملف تعريف الارتباط بنفس الطرق السابقة بالرغم من أنّ طريقة إنشائه مختلفة.

echo $_COOKIE["myVar"]; // "myVal"

لتدمير ملف تعريف الارتباط يجب إعادة استدعاء الدالة setcookie لكن تُعطى قيمة وقت انتهاء الصلاحية أي وقت ماضٍ. كما في المثال:

setcookie("myVar", "", time() - 1);
var_dump($_COOKIE["myVar"]); // null

سيلغي هذا تعيين ملف الارتباط ويزيله من حاسوب العميل.

‎$_SESSION

مصفوفة ترابطية تحوي متغيرات الجلسة المتاحة للسكربت الحالي، يمكنك الاطلاع على توثيق دوال الجلسات لمزيدٍ من المعلومات.

تشبه الجلسات ملفات تعريف الارتباط إلى حد كبير باستثناء أنّها من جانب الخادم.

يجب استدعاء الدالة session_start()‎ في بداية السكربت للسماح باستخدام الجلسات، وتعيين متغير الجلسة مثل تعيين أي متغير آخر، لاحظ المثال التالي:

$_SESSION["myVar"] = "myVal";

يُعيَّن في بداية الجلسة معرّف عشوائي (random ID) في ملف تعريف ارتباط يسمّى "PHPSESSID" سيحتوي معرّف الجلسة الحالية، ويمكن الوصول له باستدعاء الدالة session_id()‎.

يمكن تدمير متغيرات الجلسة باستدعاء الدالة unset، مثل (unset($_SESSION["myVar"]‎) سيدمر هذا المتغير.

الحل البديل هو استدعاء الدالة session_destory()‎، سيدمر هذا كامل الجلسة أي لن يبقى لدينا أيّ من متغيراتها.

‎$_REQUEST

مصفوفة ترابطية تحوي افتراضيًا محتويات المصفوفات ‎ $GET و‎$POST و‎$_COOKIE.

بما أنّه من الممكن أن تحوي هذه المصفوفات الثلاثة على فهرس بنفس الاسم فإنّه يوجد إعداد في ملف php.ini يسمى request_order يحدد الأولوية لهذه المصفوفات، مثلًا إذا ضُبط للقيمة "GPC" عندها ستُستخدم قيمة ‎$_COOKIE، فقراءتها من اليسار لليمين تعني أنّ ‎$_REQUEST ستضبط قيمتها ل‎$_GET ثم ‎$_POST ثم ‎$_COOKIE وبما أنّ ‎$_COOKIE هي الأخيرة فهي القيمة الموجودة في ‎$_REQUEST.

‎$_ENV

مصفوفة ترابطية من المتغيرات الممررة إلى السكربت الحالي عن طريق البيئة.

تُستورد هذه المتغيرات إلى مجال الأسماء العام في PHP من البيئة التي يُنفَّذ فيها محلل PHP. وتزوَّد العديد منها من الصدفة التي تُنفَّذ فيها PHP إذ أنّ الأنظمة المختلفة تشغّل أنواع مختلفة من الصدف ومن الصعب حصرها في قائمة محددة، يمكنك الاطلاع على توثيق صدفتك لتشاهد قائمة من متغيرات البيئة المعرّفة.

تتضمن متغيرات البيئة الأخرى متغيرات CGI، بغض النظر إن كانت PHP تُنفّذ كوحدة خادم أو معالج CGI.

كل ما يُخزّن ضمن ‎$_ENV يأتي من البيئة التي تُنفّذ فيها PHP، وتُملأ فقط إذا سُمح بها ضمن الملف php.ini.

3.2: متغيرات النطاق العام العالي في PHP5

هذه المتغيرات هي:

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

‎$GLOBALS

يُستخدم هذا المتغير ذو النطاق العام العالي للوصول إلى المتغيرات العامة.

<?php
$a = 10;

function foo(){
    echo $GLOBALS['a'];
}

// وهي 10 a سيطبع هذا قيمة المتغير العام
?>

‎$_REQUEST

يُستخدم هذا المتغير ذو النطاق العام العالي لجمع البيانات المرسلة من نموذج HTML.

<?php
if(isset($_REQUEST['user'])){
    echo $_REQUEST['user'];
}

// POST و/أو GET والمُرسل بطريقة `name = user` الذي لديه الخاصية HTML ستُطبع قيمة حقل

‎$_GET

يُستخدم هذا المتغير ذو النطاق العام العالي لجمع البيانات المرسلة من نموذج HTML بالطريقة GET.

<?php
if(isset($_GET['username'])){
    echo $_GET['username'];
}

// (1)
?>

في الموضع (1) ستُطبع قيمة حقل HTML الذي له الخاصية name = username والمُرسل بطريقة GET.

‎$_POST

يُستخدم هذا المتغير ذو النطاق العام العالي لجمع البيانات المرسلة من نموذج HTML بالطريقة POST.

<?php
if(isset($_POST['username'])){
    echo $_POST['username'];
}

// (1)

في الموضع (1) ستُطبع قيمة حقل HTML الذي له الخاصية name = username والمُرسل بطريقة POST.

‎$_FILES

يحمل هذا المتغير ذو النطاق العام العالي معلومات الملفات المحمّلة عبر HTTP بالطريقة POST.

<?php
if($_FILES['picture']){
    echo "<pre>";
    print_r($_FILES['picture']);
    echo "</pre>";
}

?>

ستطبع الشيفرة السابقة تفاصيل الملف مع اسم الصورة المحمّلة عبر النموذج الذي له الخاصيّات method="post"‎ وenctype="multipart/form-data"‎ تتضمن التفاصيل اسم الملف، نوع الملف، موقع الملف المؤقت وشيفرة الخطأ (في حال حصل أي خطأ أثناء تحميل الملف) وحجم الملف بالبايتات، مثال:

Array
(
    [picture] => Array
        (
            [0] => Array
                (
                    [name] => 400.png
                    [type] => image/png
                    [tmp_name] => /tmp/php5Wx0aJ
                    [error] => 0
                    [size] => 15726
                )
        )
)

‎$_SERVER

يحمل هذا المتغير ذو النطاق العام العالي معلومات حول السكربتات وترويسات HTTP ومسارات الخادم.

<?php
    echo "<pre>";
    print_r($_SERVER);
    echo "</pre>";

    /** ستطبع هذه الشيفرة التفاصيل التالية على الخادم المحلي
    (XAMPP مثل)

    Array
(
    [MIBDIRS] => C:/xampp/php/extras/mibs
    [MYSQL_HOME] => \xampp\mysql\bin
    [OPENSSL_CONF] => C:/xampp/apache/bin/openssl.cnf
    [PHP_PEAR_SYSCONF_DIR] => \xampp\php
    [PHPRC] => \xampp\php
    [TMP] => \xampp\tmp
    [HTTP_HOST] => localhost
    [HTTP_CONNECTION] => keep-alive
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/52.0.2743.82 Safari/537.36
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*;q=0.8
    [HTTP_ACCEPT_ENCODING] => gzip, deflate, sdch
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
    [PATH] => C:\xampp\php;C:\ProgramData\ComposerSetup\bin;
    [SystemRoot] => C:\Windows
    [COMSPEC] => C:\Windows\system32\cmd.exe
    [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
    [WINDIR] => C:\Windows
    [SERVER_SIGNATURE] => Apache/2.4.16 (Win32) OpenSSL/1.0.1p PHP/5.6.12 Server at localhost Port 80
    [SERVER_SOFTWARE] => Apache/2.4.16 (Win32) OpenSSL/1.0.1p PHP/5.6.12
    [SERVER_NAME] => localhost
    [SERVER_ADDR] => ::1
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => ::1
    [DOCUMENT_ROOT] => C:/xampp/htdocs
    [REQUEST_SCHEME] => http
    [CONTEXT_PREFIX] =>
    [CONTEXT_DOCUMENT_ROOT] => C:/xampp/htdocs
    [SERVER_ADMIN] => postmaster@localhost
    [SCRIPT_FILENAME] => C:/xampp/htdocs/abcd.php
    [REMOTE_PORT] => 63822
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] =>
    [REQUEST_URI] => /abcd.php
    [SCRIPT_NAME] => /abcd.php
    [PHP_SELF] => /abcd.php
    [REQUEST_TIME_FLOAT] => 1469374173.88
    [REQUEST_TIME] => 1469374173
)
*/
?>

‎$_ENV

يحمل هذا المتغير ذو النطاق العام العالي معلومات متغيرات بيئة الصدفة التي تُنفّذ فيها شيفرة PHP.

‎$_COOKIE

يُستخدم هذا المتغير ذو النطاق العام العالي لاسترجاع قيمة ملف تعريف الارتباط مع مفتاح مُعطى.

<?php
$cookie_name = "data";
$cookie_value = "Foo Bar";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
// 86400 = يوم واحد

if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie named '" . $cookie_name . "' is not set!";
}
else {
    echo "Cookie '" . $cookie_name . "' is set!<br>";
    echo "Value is: " . $_COOKIE[$cookie_name];
}

/**
Cookie 'data' is set!
Value is: Foo Bar
*/
?>

‎$_SESSION

يُستخدم هذا المتغير ذو النطاق العام العالي لضبط واسترجاع قيمة الجلسة المخزنة على الخادم.

<?php
// ابدأ الجلسة
session_start();

/**
ضبط متغيرات الجلسة التي يمكن الوصول إليها من صفحات مختلفة من الخادم الذي خزنها
*/
$_SESSION["username"] = "John Doe";
$_SESSION["user_token"] = "d5f1df5b4dfb8b8d5f";
echo "Session is saved successfully";

/**
Session is saved successfully
*/
?>

ترجمة -وبتصرف- للفصول [Superglobal Variables PHP] من كتاب PHP Notes for Professionals book

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...