متغیرهای superglobal در PHP – مقدمه
در این بخش از آموزش پی اچ پی، می خواهیم با متغیرهای superglobal در PHP آشنا شویم. در ابتدا توضیح کوتاهی در مورد متغیرهای سراسری یا همان متغیرهای گلوبال در PHP خواهیم داد.
پس از آن با متغیرهای $_GLOBALS و $_GET و $_POST و $_REQUEST آشنا خواهیم شد.
در بخش مرتبط با متغیر GET و همین طور متغیر POST در PHP به بررسی نحوه عملکرد آن ها با استفاده از ابزار Postman خواهیم پرداخت.
در ادامه آشنایی با آرایه های فوق سراسری در php به بررسی متغیر $_File خواهیم پرداخت. در این بخش نیز با استفاده از postman چند فایل را آپلود می کنیم تا با نحوه کار PHP در زمینه آپلود فایل آشنا شویم.
در ادامه معرفی متغیرهای سوپر گلوبال در پی اچ پی، به بررسی متغیر $_SERVER خواهیم پرداخت. این متغیر superglobal ، یکی از مهم ترین و کاربردی ترین متغیرهای سراسری در php می باشد.
در انتها نیز در مورد متغیرهای superglobal $_COOKIE و متغیر $_SESSION خواهیم پرداخت. در انتها نیز متغیر سوپر گلوبال $_ENV را مورد بررسی قرار خواهیم داد.
لیست موارد مطرح شده در آموزش متغیرهای superglobal
این آموزش که در مورد آرایه های فوق سراسری یا همان آرایه های superglobal صحبت می کند، از قسمت زیر تشکیل شده است. شما می توانید با کلیک روی هر کدام از لینک های زیر، به قسمت دلخواه آموزش در این صفحه منتقل شوید:
متغیرهای superglobal چیستند؟
همانگونه که می دانید متغیرهای سراسری در هرجایی از کدهای و در هر فایلی، قابل دسترسی هستند. شما می توانید با استفاده از کلمه کلیدی global در جلوی نام متغیر، از آن مقدار آن متغیر در هرجایی از کد، استفاده کنید.
این موضوع خصوصا برای استفاده از متغیرها، خارج از ناحیه scope خودشان، بسیار کاربرد دارد.
علاوه بر این مورد، زبان PHP دارای یک سری متغیر سراسری از پیش تعریف شده می باشد که به آن ها، متغیرهای فوق سراسری یا متغیرهای superglobal گفته می شود.
در واقع با استفاده از متغیرهای سوپر گلوبال، PHP یک سری از تنظیمات و مقادیر مهمی را که از سمت وب سرور دریافت می کند، در اختیار برنامه نویس قرار می دهد.
متغیرهای superglobal که در فارسی به متغیرهای فوق سراسری ترجمه شده است، دارای انواعی به شرح زیر می باشند. در بخش های مختلف زیر سعی کرده ایم که با توضیحی کوتاه، شما را با آن ها آشنا سازیم.
این آموزش، یکی از بخش های آموزش های رایگان PHP در سایت وبمستر وردپرس می باشد. در صورتی که می خواهید به کلیه بخش های این سری آموزشی رایگان دسترسی داشته باشید، می توانید از لینک زیر استفاده کنید:
متغیر $_GLOBALS در PHP
متغیر اصلی سراسری در زبان PHP، متغیر GLOBALS می باشد. برای تست آن می توانید عبارت $_GLOBALS را در داخل تابع var_dump گذاشته و نتیجه را در خروجی مشاهده کنید.
به دلیل طولانی بودن خروجی، آن را در این بخش نیاورده ایم. خودتان می توانید به راحتی خروجی آن را مشاهده کنید.
نکته مهم در مورد این آرایه این می باشد که شامل کلیه متغیرهای superglobal موجود در PHP می باشد. یعنی متغیر، آرایه ای از کلیه آرایه های فوق سراسری در پی اچ پی می باشد. همه متغیرهای سوپر گلوبال که قرار است در ادامه معرفی گردد، عناصر آرایه های این متغیر فوق سراسری می باشند.
دسترسی به هر متغیر برنامه با استفاده از متغیر GLOBALS:
در نظر داشته باشید که هر متغیری که در طول اجرای اسکریپت خود تعریف می کنید، در متغیر GLOBALS قابل دسترسی می باشد.
فرض کنید در اسکریپت خود، متغیری با نام username تعریف کرده اید. برای دسترسی به این متغیر، علاوه بر نام خود آن، می توانید از $_GLOBALS[‘username’] نیز، برای دسترسی به متغیر خود بهره ببرید.
متغیر $_GET در PHP
متغیر سوپر گلوبال $_GET یکی دیگر از متغیرهای superglobal کاربردی در PHP می باشد. متغیر GET شامل مقادیری است که از سمت کاربر در url به صورت query string به سرور ارسال شده است.
در واقع url درخواست شده توسط کاربر، در انتهای خود دارای کوئری استرینگ می باشد. داده هایی که به این روش (یعنی متد GET) به سمت سرور فرستاده می شوند، توسط این متغیر سوپر گلوبال قابل دسترسی می باشند.
یکی از مثال های رایج در این زمینه، ارسال داده های یک فرم با متد GET به سمت سرور می باشد. در این صورت اطلاعات کاربر در انتهای URL درخواست شده، به صورت query string قرار داده شده و به سمت وب سرور فرستاده می شود.
این آرایه همانند سایر متغیرهای superglobal از نوع Associative array می باشد. یعنی با توجه به نام یا همان کلید یا key آن، قابل دسترسی می باشد.
فرض کنید درخواستی به صورت عکس زیر در url فرستاده شده باشد. در این صورت خروجی متغیر GET با تابع var_dump چیزی به صورت زیر می باشد:
استفاده از Postman برای ادامه این آموزش
Postman یک ابزار بسیار کاربردی است که به ما کمک می کند تا به سرعت یک درخواست http را ایجاد کرده و ارسال کنیم. برای اینکه در این آموزش درگیر ساخت فرم و سایر موارد نشویم، برای تست متغیرهای superglobal و شبیه سازی درخواست های http فرستاده شده، از ابزار postman استفاده خواهیم کرد.
نصب ابزار Postman
برای ادامه این آموزش، نیاز دارید تا ابزار Postman را دانلود و نصب نمایید. شما می توانید با استفاده از این لینک دانلود، postman را نصب کرده و این آموزش را ادامه دهید.
مراحل نصب postman مانند سایر نرم افزار های دیگر بوده و پیچیدگی خاصی ندارد. ضمن اینکه این ابزار، دارای extension برای گوگل کروم هم می باشد.
شما با استفاده از افزونه آن می توانید آن را بر روی مرورگر کروم نیز نصب نموده و از آن استفاده کنید.
فرستادن درخواست با متد GET با استفاده از postman
در قسمت قبل، شما ابزار postman را نصب کردید. حال می توانید به راحتی درخواست های GET یا POST خود را، بدون نیاز به کدهای اضافی، به سمت سرور فرستاده و نتایج را مشاهده کنید.
در سمت راست postman، ناحیه کاری یا همان workspace شما موجود می باشد. شما می توانید در بخشی که در قبل از دکمه Send وجود دارد، نوع درخواست خود و همین طور url ای که قرار است درخواست را برای آن ارسال کنید، مشخص نمایید.
از همان url ای که در مثال قبل استفاده کردیم، استفاده می کنیم. متد را بر روی GET قرار می دهیم. در زیر این بخش چندین تب وجود دارد که برای اضافه کردن داده های اضافی است، که شما می خواهید به درخواست خود اضافه کنید.
در تب Params شما می توانید پارامتر های مورد نیاز خود را به صورت KEY و VALUE اضافه کرده و در درخواست خود بفرستید. عملا این بخش همانند فرستادن درخواست با query string عمل می کند.
نتیجه چیزی مشابه عکس زیر خواهد بود. در نظر داشته باشید که پاسخی که از سمت سرور به postman برگشت داده می شود، در زیر ناحیه کاری شما قابل رویت است.
همان طور که می بینید، جواب درخواست دارای قسمت های body و Cookie و Header می باشد. در بخش body ، من قسمت preview را انتخاب کرده ام، تا نتیجه ای که در مرورگر نمایش داده می شود را، ببینم.
متغیر $_POST در PHP
متغیر $_POST در PHP یکی از متغیرهای superglobal ای می باشد که به طور وسیعی در برنامه نویسی استفاده می شود. در بسیاری از موارد برای فرستادن داده های یک فرم HTML توسط کاربر به سمت سرور، از متد POST استفاده می شود.
برای دریافت این داده ها که با متد post به سمت سرور فرستاده شده، از متغیر سراسری $_POST باید استفاده کنیم. در واقع این متغیر مانند سایر متغیر های superglobal ، آرایه ای با فرم Associative می باشد. شما می توانید با استفاده از key آن ها، به value هر مقدار از آرایه دسترسی داشته باشید.
از متغیر فوق سراسری $_POST در فرستادن و پاس دادن متغیرها بسیار استفاده می شود.
فرستادن یک درخواست با متد POST توسط postman
این بار هم برای شبیه سازی ارسال یک درخواست با متد پست، مجددا از پست من استفاده می کنیم. در نظر داشته باشید که در سمت سرور و در اسکریپت نوشته شده، متغیر سراسری $_POST را در داخل تابع var_dump فراخوانی می کنیم تا محتوای متغیر $_POST در postman قابل مشاهده باشد.
می توانید برای فرستادن این درخواست، یک تب جدید باز کنید یا در همان تب قبلی به کار خود ادامه دهید. برای اینکه در قسمت بعد می خواهیم متغیر سراسری REQUEST را مورد بررسی قرار دهیم، لذا من در همان تب و با همان مقادیر کوئری استرینگ، به این مثال ادامه داده ام.
برای فرستادن داده ها با متد POST توسط postman ، در تب های زیر url درخواست، به بخش body بروید. بخش body خود دارای چند بخش در زیر مجموعه آن می باشد.
از بین آن ها، form-data را انتخاب کرده و سپس مقادیری را که می خواهید با متد POST به سمت سرور بفرستید. در این بخش وارد کنید. درخواست پیش از فرستادن، چیزی مشابه با عکس زیر می باشد:
بررسی نتایج متغیرهای superglobal با متد POST در postman
با فرستادن درخواست به سرور، عملا متغیر های username و همین طور id که در postman آن ها را تعریف کرده ایم، به سمت سرور فرستاده می شوند.
از آن جایی که برای نمایش داده ها با متد post از var_dump استفاده کرده ایم، نتیجه خروجی، چیزی مشابه عکس زیر خواهد بود.
متغیر $_REQUEST در PHP
متغیر $_REQUEST در واقع یکی از آرایه های سوپر گلوبال در PHP می باشد که شامل ترکیبی از متغیر های سراسری $_GET و $_POST می باشد. در واقع هر دیتایی چه به صورت متد GET فرستاده شده یا چه به صورت متد POST فرستاده شده باشد، در داخل این متغیر موجود می باشد.
به عنوان مثال برای این حالت، می توانیم submit کردن یک فرم با متد post ای را مثال بزنیم، که در url خود از کوئری استرینگ نیز استفاده کرده است.
خروجی آن چیزی مشابه زیر می باشد. برای این مثال نیز مانند بخش های قبل از postman استفاده شده است.
نکته در مورد هم نام بودن دو متغیر در متدهای GET و POST
فرض کنید در درخواست ارسال شده سمت سرور، یک متغیر هم نام، هم در متد GET و هم در متد POST استفاده شده است. در صورت وجود داده های تکراری مثل حالت بالا، داده های متد POST ارجحیت بالاتری داشته و متغیر سراسری $_REQUEST ، داده متد POST را نمایش خواهد داد.
متغیر $_FILE در PHP
عموما برای فرستادن فایل به سمت سرور، از فرم ها استفاده می شود. اطلاعات مرتبط با فایل های فرستاده شده سمت سرور در متغیر $_FILE قرار می گیرد.
متغیر $_FILE یکی از متغیرهای superglobal می باشد که کاربرد زیادی در PHP دارد. متغیر $_FILE در واقع آرایه ای از فایل های فرستاده شده به سمت سرور می باشد. شما می توانید با استفاده از نام متغیر مورد نظر به آن دسترسی داشته باشید.
معرفی عناصر آرایه متغیر $_FILE
هر عنصر آرایه متغیر $_FILE ، به صورت key و value می باشد. عنصر key آن، نام متغیری است که از سمت client به سمت سرور فرستاده می شود.
عنصر value خود مجددا یک Associative array می باشد. در واقع هر فایل فرستاده شده، دارای یک سری اطلاعات است که در ۵ عنصر این آرایه قرار می گیرد.
این عناصر شامل name و type و tmp_name و error و size آن می باشد. name معرفی نام واقعی فایل فرستاده شده می باشد. type در واقع بیانگر نوع این فایل یا همان MIME type آن می باشد.
هر فایلی که به سمت سرور فرستاده می شود، به طور موقتی در مسیر در سرور شما، توسط وب سرور ذخیره می گردد. آدرس این مسیر و نام موقت آن در متغیر tmp_name قابل دسترسی خواهد بود.
در صورتی که در طی مراحل آپلود و ذخیره سازی فایل در سرور، مشکلی پیش بیاید، این امر در متغیر error قابل مشاهده خواهد بود.
آخرین عنصر این آرایه نیز معرف size فرستاده شده می باشد. در بخش مرتبط با آپلود فایل ها در PHP به صورت کامل به شرح این موارد و کاربرد آن ها خواهیم پرداخت. فقط قصد این می باشد که شما با اجزای متغیر $_FILE آشنا شوید.
آپلود یک فایل با استفاده از postman و نمایش داده های متغیر $_FILE در آن
برای نمایش آرایه متغیر $_FILE ، به جای استفاده از فرم، بار دیگر در این بخش از postman استفاده می کنیم. در بخشی که مرتبط با تعریف داده های form-data می باشد، شما می توانید نوع داده ارسالی خود را مشخص نمایید.
این داده ها شامل دو دسته Text و File می باشد. در مثال های قبلی، ما از نوع Text استفاده کردیم. برای استفاده از نوع داده File کافی است با ماوس به محل تعریف KEY بروید و تیک مرتبط با file را بزنید.
در این صورت باکس مرتبط با KEY و VALUE متناسب با حالتی که برای آپلود فایل است، تغییر شکل می دهد. برای این مثال نام فایل را image_1 گذاشتم و در بخش مرتبط با آپلود، عکسی را آپلود کردم.
در سمت سرور نیز، برای نمایش متغیر $_FILE از آرایه های سوپر گلوبال پی اچ پی را در داخل var_dump قرار داده ام، تا بتوانم خروجی آن را مشاهده کنم. نتیجه چیزی مشابه با عکس زیر می باشد.
فرستادن چندین فایل به سمت سرور و دسترسی به مشخصه خاصی در آن
در صورتی که مثلا دو عکس به سمت سرور فرستاده باشید و بخواهید مثلا به سایز آن در سمت سرور دسترسی داشته باشید، کافی است از صدا کردن آن به صورت $_FILES[‘image_2’][‘size’] ، استفاده کنید.
متغیر $_SERVER در PHP
یکی دیگر از متغیرهای superglobal بسیار کاربردی در PHP متغیر $_SERVER می باشد. متغیر فوق سراسری $_SERVER ، یک آرایه انجمنی می باشد شامل اطلاعاتی است که از طریق وب سرور در اختیار PHP قرار گرفته است. البته آرایه $_SERVER یک سری اطلاعات اضافی نیز در خود نگهداری می کند.
این اطلاعات شامل قسمت های مختلفی، از جمله اطلاعات مرتبط با header فرستاده درخواست، اطلاعات مرتبط با path ها و همین طور اطلاعات مرتبط به محل اجرای برنامه در سمت سرور می باشد.
نکته مهم در مورد نمایش متغیر $_SERVER در بین کدها
هیچگاه آرایه $_SERVER را در بین کدهای خود چاپ نکنید. متغیر $_SERVER دارای اطلاعات حیاتی و مهم سرور شما می باشد. با چاپ آن عملا این اطلاعات به کاربر فرستنده درخواست نمایش داده می شود.
لذا ریسک مورد هک واقع شدن سرور شما، بسیار بالا خواهد رفت. بنابراین به هیچ عنوان از چاپ آن در سمت کاربر استفاده نکنید.
متغیر تستک دارای اجزا بسیار متنوعی می باشد. در این بخش شما را با کاربرد برخی از این اجزا آشنا می کنیم:
متغیر $_SERVER[‘PHP_SELF’]
این متغیر نام فایلی را که در حال حاضر در حال اجرای برنامه می باشد، بر می گرداند.
متغیر $_SERVER[‘SERVER_ADDR’]
این متغیر IP آدرس سروری که در حال اجرای برنامه می باشد را بر می گرداند.
متغیر $_SERVER[‘SERVER_NAME’]
این متغیر نام سروری که سایت روی آن هاست شده است را بر می گرداند.
متغیر $_SERVER[‘SERVER_SOFTWARE’]
در واقع رشته شناسایی یا نوع یک وب سرور را بازگشت می دهد. این می تواند مثل یک رشته به صورت Apache/2.2.26 باشد.
متغیر $_SERVER[‘SERVER_PROTOCOL’]
اسم و ورژن پروتکلی که وب سرور در حال حاضر با آن کار می کند (یا به درخواست ها پاسخ می دهد) بر می گرداند.
متغیر $_SERVER[‘REQUEST_METHOD’]
نوع متدی که را که client برای درخواست خود انتخاب کرده است، بازگشت می دهد.
متغیر $_SERVER[‘REQUEST_TIME’]
زمانی که درخواست به سمت سرور فرستاده شده است را بر حسب timestamp برگشت می دهد.
متغیر $_SERVER[‘QUERY_STRING’]
در صورتی که درخواست به همراه کوئری استرینگ فرستاده شده باشد، query string مورد نظر را بر می گرداند.
متغیر $_SERVER[‘HTTP_ACCEPT’]
Accept هدری را که در درخواست فرستاده شده را باز می گرداند.
متغیر $_SERVER[‘HTTP_ACCEPT_CHARSET’]
این متغیر character set ای را که در درخواست فرستاده شده و قابل قبول برای سمت کاربر می باشد را بر می گرداند.
متغیر $_SERVER[‘HTTP_HOST’]
هدر مرتبط با هاست که مرتبط با درخواست فعلی می باشد، توسط این متغیر قابل دستیابی می باشد.
متغیر $_SERVER[‘HTTP_REFERER’]
url کامل page مورد نظر را باز می گرداند (این مقدار در خیلی از موارد قابل اطمینان نیست، چون ممکن است توسط user-agent های مختلف پشتیبانی نشود)
متغیر $_SERVER[‘REMOTE_ADDR’]
این متغیر، IP آدرس فرستنده درخواست را باز می گرداند.
متغیر $_SERVER[‘REMOTE_HOST’]
این متغیر نام هاستی که درخواست کننده در آن، صفحه فعلی را باز کرده است و درخواست خود را فرستاده است، باز می گرداند.
متغیر $_SERVER[‘REMOTE_PORT’]
پورتی که ماشین کاربر فرستنده درخواست از آن برای ارتباط با وب سرور سایت ما استفاده می کند، توسط این متغیر بازگشت داده می شود.
متغیر $_SERVER[‘SCRIPT_FILENAME’]
آدرس و نام کامل فایل اسکریپتی که در حال حاضر در حال اجرای برنامه سمت سرور می باشد را، باز می گرداند.
متغیر $_SERVER[‘SERVER_PORT’]
پورتی که وب سرور بر روی سرور ما در حال سرویس دادن به درخواست ها می باشد، بر می گرداند.
متغیر $_SERVER[‘SERVER_SIGNATURE’]
ورژن سرور و همین طور نام Virtual host ای که در حال رندر کردن صفحات سمت سرور می باشد را به ما باز می گرداند.
متغیر $_SERVER[‘SCRIPT_NAME’]
این متغیر path اسکریپتی که در حال حاضر در حال اجرا می باشد را باز می گرداند.
متغیر $_SERVER[‘SCRIPT_URI’]
این متغیر URI اسکریپتی که در حال اجرای برنامه است را باز می گرداند.
متغیر $_COOKIE در PHP
با استفاده از متغیر $_COOKIE می توانید به کوکی هایی که در مرورگر کاربر تنظیم شده است، دسترسی داشته باشید.
عموما از کوکی ها برای شناسایی یک کاربر استفاده می شود. در واقع یک cookie فایل یا اطلاعات کوچکی است که عموما از سمت سرور برای کاربر درخواست کننده، فرستاده می شود تا در کامپیوتر یا همان مرورگر او جاسازی گردد.
حال هر بار که مرورگر کاربر، درخواستی را سمت سرور مورد نظر می فرستد، عملا در هدر درخواست خود، این کوکی ها نیز، به همراه درخواست به سمت سرور فرستاده می شود.
بدین صورت وب سرور به راحتی می تواند تشخیص دهد که این کاربر چه کسی می باشد و درخواست از سمت چه کسی فرستاده شده است.
در بخشی جداگانه به صورت کامل به این مبحث در PHP خواهیم پرداخت. اما در حال حاضر نکاتی مربوط به آن را در زیر آورده ایم تا با این متغیر سووپر گلوبال در PHP بیشتر آشنا شوید.
نمایش و تنظیم COOKIE بر روی مرورگر با استفاده از chrome devtools
برای اینکه ببینید چه کوکی هایی بر روی هاست مورد نظر و بر روی مرورگر شما ست شده است، می تواند از ابزار devtools مرورگر کروم استفاده کنید.
برای این کار کافی بر روی صفحه مورد نظر بر روی مرورگر، کلیک راست کرده و گزینه inspect را انتخاب کنید. البته می توانید مستقیما با زدن دکمه های Ctrl + Shift + i نیز این ابزار را باز کنید.
برای دیدن Cookie هایی که بر روی مرورگر شما ست شده است، ابتدا به تب Application بروید. در سمت راست، storage هایی که بر روی مرورگر شما موجود می باشد، نمایش داده شده است.
از این قسمت، بخش Cookie را انتخاب کنید و روی اسم هاست مورد نظر خود کلیک کنید. همین طور که می بینید در سمت راست، لیست کوکی ها به همراه اطلاعات مرتبط با یک کوکی نمایش داده می شود.
برای تنظیم یک کوکی بر روی مرورگر خود، کافی است به راحتی بر روی ناحیه ای خالی در زیر اسم کوکی ها کلیک کرده، نام و مقدار کوکی خود را وارد نمایید.
سپس کافی است صفحه را رفرش نمایید. در این صورت Cookie بر روی مرورگر شما، ست شده است. در عکس زیر، من دو Cookie با نام های user_id و همین طور user_name تنظیم کرده ام.
در اسکریپتی که این صفحه را اجرا می کند روی متغیر$_COOKIE ، تابع var_dump را هم اجرا کردم، تا محتویات آرایه $_COOKIE در نتیجه هم نمایش داده شود. این مورد را می توانید در عکس زیر مشاهده نمایید.
ست کردن COOKIE با استفاده از postman و نمایش آن
مشابه این کار را می توانید در postman هم انجام دهید. دقیقا در زیر دکمه Send برای فرستادن درخواست، یک گزینه با نام Cookie وجود دارد که با استفاده از آن می توانید برای درخواست خود Cookie ثبت کنید.
با ثبت کردن کوکی توسط این بخش، هر بار که درخواست فرستاده می شود، به همراه این cookie ها، درخواست ارسال و دریافت می شود.
برای این کار بر روی گزینه Cookie کلیک کنید. سپس هاست مورد نظر خود را اضافه کنید. در این مثال هاست مورد نظر من، localhost بوده است.
حال با زدن دکمه Add Cookie در هاست مورد نظر، نام و مقدار و زمان مناسب برای کوکی خود را تنظیم نمایید. با انجام این کار، عملا با هر ارسال و دریافت، در هدر درخواست یا جواب، کوکی ها نیز فرستاده می شوند.
برای اینکه کمی مثال بهتر شود، بر روی اسکریپت مورد درخواست نیز، توسط دستور setcookie یک کوکی ست کردم تا در هنگام درخواست، به سمت مرورگر درخواست کننده ارسال گردد.
همان طور که می بینید، هر دو این مقدارها، در درخواست و دریافت در هدر موجود می باشند.
$cookie_name = "msn_cookie_sample"; $cookie_value = "mehdi_soltani_cookie"; setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); var_dump($_COOKIE);
متغیر $_SESSION در PHP
همان طور که پیش تر هم در بخش مرتبط با کوکی ها بیان شد، پروتکل http یک پروتکل stateless می باشد. بنابراین در صورتی که درخواستی مجددا از سمت کاربر به سرور ارسال شود، عملا وب سرور نمی تواند آن را شناسایی کند.
به عنوان مثال فرض کنید در سایتی لاگین کرده اید و می خواهید به صفحه دیگری از همان سایت بروید. در صورتی که از متغیری استفاده نکنید تا حالت لاگین شدن به سرور اعلام نگردد، عملا وب سرور نمی تواند که شما لاگین بودید و عملا مجددا باید دیدن صفحه ای دیگر (مثلا در پنل کاربری خود) مجددا لاگین کنید.
برای حل این مشکل می توانید از متغیر SESSION که در سمت سرور ست می شود، استفاده کنید. البته در مورد مثال بالا، می توانید به راحتی از COOKIE هم استفاده نمایید.
با استفاده از متغیر $_SESSION می توانید یک نشست در سمت سرور برای یک کاربر ایجاد کنید. این باعث می شود که کاربر بتواند با حفظ اطلاعات خود، به صفحات مختلف سایت برود بدون اینکه وضعیت فعلی او، از دست برود.
به عنوان مثال می توانید برای نگهداری سبد کالا در یک فروشگاه اینترنتی، از این تکنیک یعنی آغاز یک session در سمت سرور، استفاده نمایید.
عملا برعکس COOKIE ها، این اطلاعات در سمت کامپیوتر یا دستگاه کاربر ذخیره نمی شود، بلکه این اطلاعات در سمت سرور ذخیره و نگهداری می شود.
در بخشی جداگانه به صورت کامل مبحث $_SESSION در PHP خواهیم پرداخت. اما در حال حاضر نکاتی مربوط به آن را در زیر آورده ایم تا با این متغیر فوق سراسری در PHP بیشتر آشنا شوید.
نمایش و تنظیم SESSION سمت سرور در PHP
برای اینکه یک SESSION در سمت سرور را برای یک درخواست فرستاده شده به آن، تنظیم یا ست نمایید، کافی است از دستور session_start در PHP استفاده کنید.
در تکه کد زیر، این اسکریپت در سمت سرور اجرا شده و دو متغیر مختلف برای آن استفاده می شود. به عنوان مثال شما می توانید در ابتدا، مثلا ID کاربر را که لاگین کرده، از دیتابیس گرفته و آن را سمت سرور، برای خود نگهداری کنید.
به این وسیله هنگام جابجایی کاربران بین صفحات سایت شما، به راحتی می توانید تشخیص دهید که کدام کاربر، نیاز به کدام صفحه، سرویس یا خدمات شما را دارد.
// Start the session session_start(); $_SESSION['msn_user_session1'] = 'mehdi98987676111'; $_SESSION['msn_user_session2'] = 'mehdi98987676222'; var_dump($_COOKIE); var_dump($_SESSION);
مقایسه نتایج برگشت داده شده بعد از ست شدن SESSION در مرورگر و postman
برای بررسی نتایج، پس از تنظیم شدن و استارت SESSION سمت سرور، نتایج را با var_dump نمایش داده ایم. همان گونه که در عکس هم می بینید، نتایج تقریبا یکسان است، اما تفاوت کوچکی بین آن وجود دارد.
وب سرور تشخیص می دهد که این دو درخواست، از دو بخش مجزا از هم، سمت سرور فرستاده شده است. بنابراین علاوه بر استارت کردن session برای هر کدام از آن ها سمت سرور، در هدر پاسخ به درخواست، از set-cookie استفاده می کند.
این هدر که توسط وب سرور گذاشته می شود، باعث می شود که دو PHP session ID مختلف، بر روی دو دستگاه مخلتف تنظیم شود. از این به بعد، هر درخواست که سمت سرور فرستاده می شود، عملا این کوکی ها هم به سمت وب سرور فرستاده می شود.
با ست کردن این کوکی ها در سمت کامپیوتر کاربر، وب سرور می تواند در سمت سرور به راحتی تشخیص دهد که درخواست از سمت کدام agent به سمت او فرستاده شده است.
مقایسه PHPSESSID را در عکس زیر می توانید مشاهده کنید. برای اینکه کوکی ها هم در مرورگر و هم در برنامه postman قابل رویت باشد، متغیر Cookie را نیز با دستور var_dump فراخوانی کرده ایم.
این دو تصویر بر روی هم گذاشته شده تا تفاوت آن ها را بهتر متوجه شوید.
متغیر $_ENV در PHP
شما می توانید در هر وب سروری، یک سری متغیرهای محیطی یا environment variable تعریف کنید. سپس با استفاده از آن ها، برنامه را اجرا کنید.
این امر خصوصا در زمانی که شما از چندین سرور برای اجرای کدهای خود استفاده می کنید و api های مرتبط به هر سرور، با دیگر فرق داشته اما کدهای شما، عملا تفاوت باهم ندارند، بسیار کاربردی می باشد. (مثلا دارای سه سرور برای محیط های development و test و production خود هستید.
شما می توانید با دستوراتی همچون setenv یا putenv متغیر محیطی برای خود تعریف کنید و سپس مثلا با استفاده از getenv از آن استفاده کنید.
ضمن اینکه به جای این کار، می توانید مستقیما از متغیر $_ENV استفاده نمایید.
در کد زیر از هر دو روش برای این کار استفاده شده است. برای اینکه با این مورد بیشتر آشنا شوید، می توانید از مقاله هایی که برای مطالعه بیشتر در انتهای این مطلب آورده شده است، استفاده نمایید.
$_ENV['msn_first_env_key'] = 'first_value'; var_dump($_ENV); //The result is something like this in the following: array (size=1) 'msn_first_env_key' => string 'first_value' (length=11)
نتیجه گیری برای آموزش متغیرهای superglobal در PHP
در این سری از آموزش های PHP ، با انواع متغیرهای superglobal در زبان پی اچ پی آشنا شدیم. کلیه آرایه های فوق سراسری که در زبان PHP مورد استفاده قرار می گیرند به صورت خلاصه توضیح داده شده اند.
برای بررسی جزئی تر آرایه های سوپر گلوبال، ممکن است به توضیحات بیشتری نیاز داشته باشید که هر کدام از آن ها در مقاله ای جداگانه مورد بررسی قرار خواهند گرفت.
ممکن است شما با موارد بیشتری در این حوزه آشنا باشید، که ما فراموش کرده ایم تا آن ها را در این مقاله قرار دهیم.
اگر شما از این موارد آگاه هستید، حتما در بخش نظرات عنوان کنید تا آن را به مقاله “آموزش آرایه های فوق سراسری در PHP ” اضافه کنیم. در ضمن اگر این مقاله را مفید دیدید، حتما آن را به دوستان خود معرفی کرده یا در شبکه های اجتماعی به اشتراک بگذارید.
راهنما برای مطالعه بیشتر:
برای تولید مقاله انواع عملگرها در PHP ، از لینک های زیر استفاده شده است که برای مطالعه بیشتر، می توانید به آن ها مراجعه کنید:
راهنما برای خواندن سایر مقالات سایت به صورت دسته بندی شده:
شما می توانید از طریق لینک های کاربردی زیر به سایر مقالات سایت که کاملا بصورت طبقه بندی شده وجود دارد، مراجعه نموده و از آن ها استفاده کنید:
ای کاش ویدیو بود
سلام
مقالتون خوب ، کامل ، و روان توضیح داده شده
ممنونم.
با سلام و تشکر از مقالات عالیتون واقعاً کامل هستند و مشخصا برای تولید این مقاله ها زحمات زیادی کشیده اید
موفق باشید
سلام به شما دوست عزیز
بسیار سپاسگزارم که وقت ارزشمند خودتون رو گذاشتید تا پیام های محبت آمیز برای ما ارسال کنید.
از اینکه این مقالات برای شما کاربردی بوده، واقعا خوشحال هستیم.
سپاس فراوان