Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

การใช้ Package Dotenv เพื่อจัดการ Environment Variables

บทความนี้แนะนำการใช้ Package Dotenv ใน PHP เพื่อจัดการ Environment Variables อย่างมีประสิทธิภาพ โดย Package นี้ช่วยให้โหลดค่าจากไฟล์ `.env` เข้าสู่ตัวแปรต่างๆ ข...

การใช้ Package Dotenv เพื่อจัดการ Environment Variables

ในบทที่แล้ว เราได้พูดถึงความสำคัญของ Environment Variables ในการพัฒนาแอปพลิเคชัน PHP ไปแล้ว ในบทนี้ เราจะมาเรียนรู้วิธีการใช้ Package ที่ชื่อว่า Dotenv เพื่อจัดการ Environment Variables ในโปรเจกต์ของเราอย่างมีประสิทธิภาพ

vlucas/phpdotenv คืออะไร?

vlucas/phpdotenv เป็น Package PHP ที่ช่วยให้เราโหลดค่าจากไฟล์ .env เข้าสู่ $_ENV, $_SERVER และ getenv() ได้อย่างง่ายดาย ทำให้เราสามารถจัดการค่าคอนฟิกของแอปพลิเคชันได้อย่างสะดวกและปลอดภัย โดยเฉพาะอย่างยิ่งในการพัฒนาและ deploy แอปพลิเคชันในสภาพแวดล้อมที่แตกต่างกัน (เช่น development, staging, production)

การติดตั้ง Dotenv ผ่าน Composer

ก่อนที่เราจะเริ่มใช้งาน Dotenv ได้ เราต้องทำการติดตั้ง Package ผ่าน Composer ก่อน โดยเปิด Terminal หรือ Command Prompt แล้ว navigate ไปยัง root directory ของโปรเจกต์ PHP ของคุณ จากนั้นรันคำสั่ง:

composer require vlucas/phpdotenv

Composer จะทำการดาวน์โหลดและติดตั้ง Package Dotenv พร้อมกับ dependencies ที่เกี่ยวข้องลงในโปรเจกต์ของคุณ

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

หลังจากติดตั้ง Dotenv เรียบร้อยแล้ว ขั้นตอนต่อไปคือการสร้างไฟล์ .env ใน root directory ของโปรเจกต์ ไฟล์นี้จะเป็นที่เก็บค่า Environment Variables ทั้งหมดของเรา ตัวอย่างเช่น:

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

ข้อควรจำ:

  • ควรเก็บไฟล์ .env นี้ไว้นอก Version Control System (เช่น Git) เพื่อป้องกันการเปิดเผยข้อมูลลับ หากใช้ Git ให้เพิ่ม .env เข้าไปในไฟล์ .gitignore
  • ชื่อ Environment Variables ควรเป็นตัวพิมพ์ใหญ่และใช้ underscore (_) ในการคั่นคำ
  • ค่าของ Environment Variables สามารถเป็น string, number หรือ boolean

การโหลดไฟล์ .env ด้วย Dotenv

เมื่อเรามีไฟล์ .env แล้ว เราต้องทำการโหลดไฟล์นี้เข้าไปในแอปพลิเคชันของเรา โดยปกติแล้วเราจะทำในไฟล์ bootstrap ของแอปพลิเคชัน (เช่น index.php หรือไฟล์ที่ใช้เริ่มต้นการทำงานของแอปพลิเคชัน) ตัวอย่าง:

<?php

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

use Dotenv\Dotenv;

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

// ... โค้ดส่วนอื่นๆ ของแอปพลิเคชัน

คำอธิบาย:

  1. require_once __DIR__ . '/vendor/autoload.php';: เป็นการโหลด autoloader ของ Composer เพื่อให้เราสามารถใช้งาน classes จาก Package ที่ติดตั้งได้
  2. use Dotenv\Dotenv;: เป็นการ import class Dotenv จาก namespace Dotenv
  3. $dotenv = Dotenv::createImmutable(__DIR__);: เป็นการสร้าง instance ของ class Dotenv โดยระบุ directory ที่เก็บไฟล์ .env (ในที่นี้คือ root directory ของโปรเจกต์) method createImmutable จะทำให้ Environment Variables ไม่สามารถถูกแก้ไขได้หลังจากที่โหลดแล้ว
  4. $dotenv->load();: เป็นการโหลดค่าจากไฟล์ .env เข้าสู่ $_ENV, $_SERVER และ getenv()

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

  • FileNotFoundException: เกิดขึ้นเมื่อไม่พบไฟล์ .env ตรวจสอบให้แน่ใจว่าไฟล์ .env อยู่ใน directory ที่ถูกต้อง และระบุ directory ให้ถูกต้องตอนสร้าง instance ของ Dotenv
  • InvalidPathException: เกิดขึ้นเมื่อ directory ที่ระบุไม่ถูกต้อง ตรวจสอบให้แน่ใจว่า directory ที่ระบุมีอยู่จริง

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

หลังจากที่เราโหลดไฟล์ .env แล้ว เราสามารถเข้าถึงค่า Environment Variables ได้โดยใช้ฟังก์ชัน getenv(), $_ENV หรือ $_SERVER ตัวอย่าง:

<?php

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

use Dotenv\Dotenv;

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

$appName = getenv('APP_NAME');
$appEnv = $_ENV['APP_ENV'];
$dbHost = $_SERVER['DB_HOST'];

echo "App Name: " . $appName . "<br>";
echo "App Environment: " . $appEnv . "<br>";
echo "Database Host: " . $dbHost . "<br>";

ผลลัพธ์:

App Name: My Awesome App
App Environment: development
Database Host: 127.0.0.1

คำแนะนำ:

  • โดยทั่วไปแล้ว การใช้ฟังก์ชัน getenv() เป็นวิธีที่แนะนำ เนื่องจากเป็นวิธีที่ portable และทำงานได้ในทุกสภาพแวดล้อม
  • ควรตรวจสอบว่า Environment Variable ที่เราต้องการเข้าถึงมีอยู่จริงหรือไม่ ก่อนที่จะใช้งาน เพื่อป้องกัน error ตัวอย่าง:
<?php

$apiKey = getenv('API_KEY');

if ($apiKey === false) {
  echo "API_KEY is not defined in .env file.";
} else {
  // ใช้งาน API Key
  echo "API Key: " . $apiKey;
}

กรณีใช้งานจริง

ลองพิจารณาการตั้งค่า Database Connection ในแอปพลิเคชันของเรา โดยใช้ Environment Variables:

<?php

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

use Dotenv\Dotenv;

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

$host = getenv('DB_HOST');
$port = getenv('DB_PORT');
$database = getenv('DB_DATABASE');
$username = getenv('DB_USERNAME');
$password = getenv('DB_PASSWORD');

try {
  $dsn = "mysql:host=$host;port=$port;dbname=$database";
  $pdo = new PDO($dsn, $username, $password);
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  echo "Database connection successful!";

  // ... ทำงานกับ database

} catch (PDOException $e) {
  echo "Database connection failed: " . $e->getMessage();
}

ในตัวอย่างนี้ เราใช้ค่าจาก Environment Variables เพื่อสร้าง Data Source Name (DSN) สำหรับการเชื่อมต่อกับฐานข้อมูล ทำให้เราสามารถเปลี่ยนการตั้งค่าการเชื่อมต่อฐานข้อมูลได้อย่างง่ายดาย โดยไม่ต้องแก้ไขโค้ดโดยตรง

สรุป

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

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service