متغیرهای محیطی در PHP

  • آپدیت شده در تاریخ

متغیرهای محیطی (Enviroment Variables) متغیر هایی هستند که بسته به نرم افزار ها یا سروریس هایی که در سیستم عامل در حال اجرا هستند , تعریف میشوند . احتمالا در مورد ست کردن PATH در PHP یا Composer شنیدید یا حتی هنگام نصب کردن یه نرم افزار . در واقع PATH یک مثالی از متغیر های محیطی است.

 

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

 

زمانی که اولین بار یاد گرفتم چطور ورژن کد های خود را با git کنترل کنم , به من گفته شد به هیچ وجه اطلاعات و داده های حساس را در سورس کد قرار ندم. اطلاعات حساس شامل پسورد دیتابیس , کلید های API , احراز هویت های وب سرویس و غیره .. است . خب حالا که یاد گرفتیم اطلاعات حساس را در داخل سورس کد قرار ندیم , چگونه می خواهیم در اپلیکیشن خود از کلید یا پسورد موردنظر استفاده کنید ؟ همانطور که حدس زدید استفاده از متغیرهای محیطی در php (Environment Variables) است .

ست کردن متغیرهای محیطی

تعریف کردن متغیرهای محیطی در سیستم عامل های مختلف , متفاوت می باشد . در این آموزش فقط قصد معرفی آن در زبان PHP را داریم .

برای ست کردن متغیرهای محیطی در PHP از دو روش می توانیم استفاده کنیم .

اولین روش استفاده از آرایه سوپرگلوبال $_ENV است .

یا یک روش پیشنهادی دیگر استفاده از تابع putenv در PHP است .

فراخوانی متغیرهای محیطی در PHP

همانند تعریف کردن متغییر محیطی در php , برای دریافت مقادیر متغیر های محیطی از دو روش استفاده میکنیم .

روش اول برای دسترسی به مقادیر متغیرهای محیطی استفاده از آرایه سوپرگلوبال $_ENV و روش دیگر که باز پیشنهاد میشود از آن استفاده کنید تابع getenv است که مقدار ذخیره شده را برگشت (return) میدهد.

یا

روش های بهتر برای مدیریت متغیرهای محیطی در PHP

روش های بالا به خوبی کار میکنند. بیشتر افراد فقط این تکه کد ها را در فایل اپلیکیشن php خود اضافه می کنند .در حالی که این مورد برخلاف عقیده ” به هیچ وجه اطلاعات و داده های حساس را در سورس کد قرار ندیم” است.

راه بهتری برای استفاده از متغییر های محیطی وجود دارد . می توانیم یک فایل PHP بسازیم و آن را جدا از سورس کد ورژن کنترل قرار بدیم و سپس متغییر های محیطی خود را در این فایل اضافه کنیم . بعد برای اطمینان از وجود فایل , از مدیریت خطاها (error exception) استفاده کنیم برای نمایش یک اخطار هنگام اجرا کد توسط توسعه دهنده ای که از کد ما استفاده می کند و اشاره کنیم که یک فایل بسازید .

این راهی بود که قبل از آشنایی با DotEnv استفاده می کردم . این کتابخانه راه تمیزتری برای استفاده به جای روش بالا می باشد

DotEnv چی چیزی پیشنهاد میدهد .

این کتابخانه به ما امکانات زیر را ارایه می دهد.

  • می توانیم متغیرهای محیطی را بارگذاری کنیم.
  • به ما اجازه تعریف متغیرهای محیطی که باید استفاده شود را می دهد.
  • استفاده از تابع env را به صورت خلاصه شده زیر پیشنهاد میدهد

  • متغیرهای محیطی در php را اعتبارسنجی می کند

استفاده از کتابخانه DotEnv

این کتابخانه نیاز دارد که یک فایل .env بسازید که متغیرهای محیطی خود را به صورت جفت key=value قرار بدید

یک مثال از فایل .env

مقدار key یک رشته (string) قبل از علامت = است و مقدار بعد از علامت مساوی (=) میتواند داخل یک کوتیشن (‘) باشد یا نه که همگی به سلیقه شخصی بستگی دارد.

قبل از استفاده از این کتابخانه در php باید این پکیج را از github دانلود یا از طریق composer نصب کنید . خب دستور نصب با کامپوزر به صورت زیر است

برای آشنایی با composer در php کلیک کنید

بعد از نصب کتابخانه dotEnv و می توانیم فایل index.php خود را بسازیم و autoloader کامپوزر را فراخوانی کنیم

بعد از فراخوانی (include) بسته نصب شده از شی DotEnv برای بارگذاری فایل .env استفاده می کنیم.

Constructor کلاس DotEnv دایرکتری فایل .env را دریافت می کند .

دسترسی به اطلاعات DotEnv

همانطور که قبلا اشاره کردیم , می توانیم از تابع getenv برای دریافت مقدار متغیر محیطی استفاده کنیم ولی کتابخانه DotEnv تابع env که کوتاه تر از تابع getenv است ارایه میدهد . مهمتر از آن یک پارامتر دوم برای ست کردن مقدار پیش فرض در اختیار ما قرار می دهد.

مثالی از فایل wp-config.php وردپرس

متغیرهای محیطی در PHP

استفاده از متغییرهای محیطی در PHP همان چیزی است که در فریمورک محبوب لاراول (Laravel) نیز مورد استفاده قرار میگیرد و به شخصه در پروژه های بدون لاراول با معماری mvc از این مورد بصورت همیشگی استفاده می کنم. پس توصیه می کنم برای ذخیره اطلاعات ثابت پروژه مثل اطلاعات ورود دیتابیس, فعال سازی حالت دیباگ و کلید API وبسرویس های جانبی و خیلی موارد دیگر از متغیرهای محیطی در php با استفاده از .env بهره ببرید.

جمع بندی

امیدوارم مقاله متغیرهای محیطی در PHP برای شما مفید واقع شده باشد و درک خوبی از اینکه چرا گاهی اوقات از متغیر های محیطی (Environment Variables) در اپلیکشن تحت وب خود استفاده کنیم , پیدا کنید.

هرگونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .

موفق و پیروز باشید

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۴)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. sobhan ۱۷ خرداد ۱۴۰۱

    سلام و ادب
    میشه در مورد متغیرهای محیطی در هاست های اشتراکی نیز توضیح دهید. البته منظورم بیشتر در بحث امنیت آن است. یعنی چطور میتوان با توجه به امنیتی که اشاره کردید، در هاست اشتراکی استفاده نمود
    به عنوان نمونه از طریق htaccess میتوان آنها را ست نمود.
    ممنون از شما

    پاسخ
  2. گمنام ۲۰ اردیبهشت ۱۴۰۱

    بسم الله الرحمن الرحیم
    سلام علیکم
    عالی بود .

    پاسخ
    1. حسن شفیعی ۲۰ اردیبهشت ۱۴۰۱

      سلام. خوشحالیم که مفید واقع شده
      موفق باشید

      پاسخ
  3. زهره ۱۲ فروردین ۱۳۹۷

    سلام
    میشه توضیح بدید این متغیرهای محیطی عملکردشون چه شکلیه؟ چرا امن هستن برای ذخیره داده های حساس؟؟؟

    پاسخ
    1. حسن شفیعی ۱۲ فروردین ۱۳۹۷

      سلام . شما چیزی مثل سیشن رو فرض کنید که یک سری داده ذخیره میکنه و فقط در سمت سرور در دسترسه (برخلاف کوکی). حالا در مورد متغیر های محیطی از نام آنها مشخص است . به اینصورت که در روت اصلی پروژه شما قرار نمیگیره و یک شاخه بالاتر است و عملا از طریق کاربر و محیط تعاملی سایت فایل دسترس نیست و بصورت محیطی (local) و داخل کدها از اون برای مدیریت ثابت ها استفاده میکنم.

      موفق باشید.

      پاسخ
دوره های آموزشی