跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

การใช้ .env: จัดการ Environment Variables

บทความนี้แนะนำการใช้ไฟล์ `.env` ร่วมกับ package `vlucas/phpdotenv` ใน PHP เพื่อจัดการ Environment Variables อย่างมีประสิทธิภาพ ทำให้สามารถแยกค่าคอนฟิกูเรชันออกจ...

การใช้ .env: จัดการ Environment Variables

ในบทความก่อนหน้านี้ เราได้เรียนรู้เกี่ยวกับการ Refactoring ด้วยเทคนิค Decompose Conditional ซึ่งช่วยให้โค้ดของเราอ่านง่ายและบำรุงรักษาง่ายขึ้น ในบทความนี้ เราจะมาเรียนรู้วิธีการจัดการ Environment Variables โดยใช้ไฟล์ .env ซึ่งเป็นวิธีที่ได้รับความนิยมในการกำหนดค่าต่างๆ ที่แตกต่างกันในแต่ละสภาพแวดล้อม (เช่น development, staging, production) การใช้ .env จะช่วยให้เราไม่ต้องแก้ไขโค้ดโดยตรงเมื่อต้องการเปลี่ยนค่าคอนฟิกูเรชัน และยังช่วยเพิ่มความปลอดภัยให้กับข้อมูลสำคัญ เช่น รหัสผ่านฐานข้อมูล หรือ API Keys

.env file คืออะไร

.env (อ่านว่า "ดอท อีเอ็นวี") คือไฟล์ข้อความธรรมดา (plain text file) ที่ใช้เก็บ Environment Variables หรือตัวแปรสภาพแวดล้อม โดย Environment Variables คือตัวแปรที่ใช้เก็บค่าคอนฟิกูเรชันต่างๆ ของแอปพลิเคชัน เช่น ข้อมูลการเชื่อมต่อฐานข้อมูล, API Keys, หรือ URL ของบริการภายนอก การใช้ .env ช่วยให้เราสามารถแยกค่าคอนฟิกูเรชันออกจากโค้ด ทำให้โค้ดของเรามีความยืดหยุ่นและง่ายต่อการจัดการมากยิ่งขึ้น

ข้อดีของการใช้ .env:

  • ความปลอดภัย: ช่วยเก็บข้อมูลสำคัญ เช่น รหัสผ่านฐานข้อมูล, API Keys ให้เป็นความลับ ไม่ต้อง hardcode ในโค้ด
  • ความยืดหยุ่น: ง่ายต่อการเปลี่ยนแปลงค่าคอนฟิกูเรชันในแต่ละสภาพแวดล้อม (development, staging, production)
  • การจัดการ: ช่วยให้การจัดการค่าคอนฟิกูเรชันเป็นระบบมากขึ้น

การติดตั้ง Package สำหรับอ่าน .env

โดยปกติแล้ว PHP ไม่สามารถอ่านไฟล์ .env ได้โดยตรง เราจึงต้องใช้ Package ภายนอกเพื่อช่วยในการอ่านและจัดการ Environment Variables มีหลาย Package ที่สามารถใช้ได้ แต่ในบทความนี้เราจะใช้ Package ที่ชื่อว่า vlucas/phpdotenv ซึ่งเป็นที่นิยมและใช้งานง่าย

ขั้นตอนการติดตั้ง vlucas/phpdotenv:

  1. ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Composer แล้ว หากยังไม่ได้ติดตั้ง สามารถดาวน์โหลดและติดตั้งได้จาก https://getcomposer.org/
  2. เปิด Command Line หรือ Terminal ใน Directory ของโปรเจกต์ PHP ของคุณ
  3. รันคำสั่งต่อไปนี้เพื่อติดตั้ง vlucas/phpdotenv:
  4. composer require vlucas/phpdotenv
  5. Composer จะดาวน์โหลดและติดตั้ง Package พร้อมทั้ง Dependencies ที่เกี่ยวข้องลงในโปรเจกต์ของคุณ

การสร้างไฟล์ .env

หลังจากติดตั้ง Package เรียบร้อยแล้ว ให้สร้างไฟล์ .env ใน Root Directory ของโปรเจกต์ของคุณ (Directory เดียวกับไฟล์ composer.json) จากนั้นให้เพิ่ม Environment Variables ที่คุณต้องการลงในไฟล์ .env โดยแต่ละตัวแปรจะอยู่ในรูปแบบ KEY=VALUE

ตัวอย่างไฟล์ .env:

APP_NAME=My Awesome App
APP_ENV=development
APP_DEBUG=true
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=root
DB_PASSWORD=secret

ข้อควรระวัง:

  • อย่า Commit ไฟล์ .env ขึ้น Repository (เช่น GitHub) เนื่องจากไฟล์นี้อาจมีข้อมูลสำคัญที่เป็นความลับ
  • เพิ่มไฟล์ .env ลงในไฟล์ .gitignore เพื่อป้องกันไม่ให้ Git ติดตามไฟล์นี้

การเข้าถึง Environment Variables

หลังจากที่เราสร้างไฟล์ .env และติดตั้ง Package vlucas/phpdotenv แล้ว เราสามารถเข้าถึง Environment Variables ในโค้ด PHP ของเราได้ง่ายๆ

ขั้นตอนการเข้าถึง Environment Variables:

  1. Include Autoloader ของ Composer ในไฟล์ PHP ของคุณ:
  2. require __DIR__ . '/vendor/autoload.php';
  3. Load Environment Variables จากไฟล์ .env:
  4. $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();
  5. เข้าถึง Environment Variables โดยใช้ฟังก์ชัน getenv() หรือ $_ENV:
  6. $appName = getenv('APP_NAME'); // หรือ $_ENV['APP_NAME']
    $dbHost = getenv('DB_HOST'); // หรือ $_ENV['DB_HOST']

ตัวอย่างการใช้งาน:

<?php

require __DIR__ . '/vendor/autoload.php';

use Dotenv\Dotenv;

$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();

$appName = getenv('APP_NAME');
$dbHost = getenv('DB_HOST');
$dbPort = getenv('DB_PORT');
$dbDatabase = getenv('DB_DATABASE');
$dbUsername = getenv('DB_USERNAME');
$dbPassword = getenv('DB_PASSWORD');

echo "Application Name: " . $appName . "<br>";
echo "Database Host: " . $dbHost . "<br>";
echo "Database Port: " . $dbPort . "<br>";
echo "Database Name: " . $dbDatabase . "<br>";
echo "Database Username: " . $dbUsername . "<br>";
echo "Database Password: " . $dbPassword . "<br>";

?>

อธิบายโค้ด:

  • require __DIR__ . '/vendor/autoload.php';: Include Autoloader ของ Composer เพื่อให้สามารถใช้งาน Class ต่างๆ ที่ติดตั้งผ่าน Composer ได้
  • $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);: สร้าง Instance ของ Class Dotenv โดยระบุ Directory ที่ไฟล์ .env อยู่ (ในที่นี้คือ Root Directory ของโปรเจกต์)
  • $dotenv->load();: Load Environment Variables จากไฟล์ .env เข้าสู่ Environment ของ PHP
  • getenv('APP_NAME');: ดึงค่าของ Environment Variable ที่ชื่อ APP_NAME โดยใช้ฟังก์ชัน getenv()

กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย

กรณีใช้งานจริง: การกำหนดค่า Database ในแต่ละ Environment

สมมติว่าเรามีแอปพลิเคชันที่ต้องเชื่อมต่อกับฐานข้อมูลที่แตกต่างกันในแต่ละ Environment (development, staging, production) เราสามารถใช้ .env เพื่อกำหนดค่าการเชื่อมต่อฐานข้อมูลสำหรับแต่ละ Environment ได้

ไฟล์ .env (development):

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=development_db
DB_USERNAME=root
DB_PASSWORD=

ไฟล์ .env (production):

DB_CONNECTION=mysql
DB_HOST=production_db_server
DB_PORT=3306
DB_DATABASE=production_db
DB_USERNAME=admin
DB_PASSWORD=super_secret_password

โค้ด PHP:

<?php

require __DIR__ . '/vendor/autoload.php';

use Dotenv\Dotenv;

$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();

$dbConnection = getenv('DB_CONNECTION');
$dbHost = getenv('DB_HOST');
$dbPort = getenv('DB_PORT');
$dbDatabase = getenv('DB_DATABASE');
$dbUsername = getenv('DB_USERNAME');
$dbPassword = getenv('DB_PASSWORD');

// Use these variables to connect to the database

?>

ข้อผิดพลาดที่พบบ่อย:

  • ลืมติดตั้ง vlucas/phpdotenv: หากคุณพยายามใช้งาน Dotenv โดยที่ยังไม่ได้ติดตั้ง Package คุณจะได้รับ Error
  • ไฟล์ .env ไม่ได้อยู่ใน Root Directory: Dotenv จะค้นหาไฟล์ .env ใน Root Directory ของโปรเจกต์ หากไฟล์ไม่ได้อยู่ใน Directory นี้ คุณจะต้องระบุ Path ที่ถูกต้องให้กับฟังก์ชัน Dotenv::createImmutable()
  • ลืม Include Autoloader: หากคุณลืม Include Autoloader ของ Composer คุณจะไม่สามารถใช้งาน Class Dotenv ได้
  • ค่า Environment Variable ไม่ได้ถูกกำหนด: หากคุณพยายามเข้าถึง Environment Variable ที่ไม่ได้ถูกกำหนดไว้ในไฟล์ .env ฟังก์ชัน getenv() จะ Return ค่า false

สรุป:

การใช้ .env เป็นวิธีที่มีประสิทธิภาพในการจัดการ Environment Variables ในโปรเจกต์ PHP ของคุณ ช่วยให้คุณสามารถแยกค่าคอนฟิกูเรชันออกจากโค้ด, เพิ่มความปลอดภัยให้กับข้อมูลสำคัญ, และทำให้การจัดการค่าคอนฟิกูเรชันเป็นระบบมากขึ้น ในบทความถัดไป เราจะมาเรียนรู้เกี่ยวกับการ Deploy แอปพลิเคชัน PHP เบื้องต้นไปยัง Shared Hosting

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务