跳到主要内容

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

系统指南 内容已审核

ทำไมต้องใช้ Environment Variables?

บทความนี้อธิบายถึงความสำคัญของการใช้ Environment Variables ในการพัฒนาแอปพลิเคชัน PHP โดยเน้น 3 ประเด็นหลัก: ความปลอดภัย (ป้องกันข้อมูลลับ), ความยืดหยุ่น (ปรับเป...

ทำไมต้องใช้ Environment Variables?

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

ความปลอดภัย: ป้องกันข้อมูลลับ

เหตุผลหลักข้อแรกที่เราใช้ Environment Variables ก็คือเรื่องของ ความปลอดภัย ลองจินตนาการว่าคุณเขียนโปรแกรมที่ต้องเชื่อมต่อกับฐานข้อมูล แน่นอนว่าคุณต้องใส่ username และ password ของฐานข้อมูลลงไปในโค้ด ถ้าคุณ hardcode ข้อมูลเหล่านี้ลงไปโดยตรง นั่นหมายความว่าใครก็ตามที่เข้าถึงโค้ดของคุณได้ ก็จะสามารถเข้าถึงฐานข้อมูลของคุณได้เช่นกัน! ซึ่งเป็นเรื่องที่ไม่ควรเกิดขึ้นอย่างยิ่ง

Environment Variables ช่วยแก้ปัญหานี้ได้ เพราะเราจะเก็บ username และ password ของฐานข้อมูลไว้ในไฟล์ .env ซึ่งเป็นไฟล์ที่แยกออกมาจากโค้ด และไม่ได้ถูก commit เข้าไปใน repository (เช่น GitHub) ดังนั้น ต่อให้ใครก็ตามเข้าถึงโค้ดของคุณได้ เขาก็จะไม่สามารถเข้าถึงข้อมูลลับเหล่านี้ได้

ตัวอย่าง:

สมมติว่าเรามีไฟล์ .env ที่เก็บข้อมูลการเชื่อมต่อฐานข้อมูล:

DB_HOST=localhost
DB_DATABASE=mydatabase
DB_USERNAME=myuser
DB_PASSWORD=mypassword

ในโค้ด PHP ของเรา เราจะอ่านค่าเหล่านี้จาก Environment Variables แทนที่จะ hardcode ลงไป:

<?php

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

$dsn = "mysql:host=$host;dbname=$database;charset=utf8mb4";

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected to the database successfully!";
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

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

  • การ commit ไฟล์ .env เข้าไปใน repository: อย่าลืมใส่ไฟล์ .env ไว้ในไฟล์ .gitignore เพื่อป้องกันไม่ให้มันถูก commit ขึ้นไป
  • การ hardcode ข้อมูลลับในโค้ด: ตรวจสอบให้แน่ใจว่าคุณไม่ได้ hardcode ข้อมูลลับใดๆ ลงไปในโค้ดของคุณ

ความยืดหยุ่น: ปรับเปลี่ยนการตั้งค่าได้ง่าย

เหตุผลที่สองที่เราใช้ Environment Variables คือเรื่องของ ความยืดหยุ่น ลองคิดดูว่าถ้าคุณมีแอปพลิเคชันที่ต้องทำงานในหลายสภาพแวดล้อม (เช่น development, staging, production) แต่ละสภาพแวดล้อมอาจมีการตั้งค่าที่แตกต่างกัน เช่น URL ของ API หรือโหมดการทำงานของแอปพลิเคชัน ถ้าคุณ hardcode การตั้งค่าเหล่านี้ลงไปในโค้ด คุณจะต้องแก้ไขโค้ดทุกครั้งที่คุณต้องการ deploy แอปพลิเคชันไปยังสภาพแวดล้อมใหม่ ซึ่งเป็นเรื่องที่ยุ่งยากและเสียเวลา

Environment Variables ช่วยให้เราสามารถปรับเปลี่ยนการตั้งค่าของแอปพลิเคชันได้ง่าย โดยไม่ต้องแก้ไขโค้ด เราสามารถกำหนดค่า Environment Variables ที่แตกต่างกันสำหรับแต่ละสภาพแวดล้อมได้ และแอปพลิเคชันของเราจะอ่านค่าเหล่านี้จาก Environment Variables เอง

ตัวอย่าง:

สมมติว่าเรามี Environment Variable ที่ชื่อว่า APP_ENV ซึ่งระบุว่าแอปพลิเคชันของเรากำลังทำงานอยู่ในสภาพแวดล้อมใด:

  • ในสภาพแวดล้อม development เราจะตั้งค่า APP_ENV=development
  • ในสภาพแวดล้อม production เราจะตั้งค่า APP_ENV=production

ในโค้ด PHP ของเรา เราสามารถตรวจสอบค่า APP_ENV เพื่อกำหนดการทำงานของแอปพลิเคชันได้:

<?php

$appEnv = getenv('APP_ENV');

if ($appEnv === 'development') {
    // เปิด debugging mode
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
} else {
    // ปิด debugging mode
    error_reporting(0);
    ini_set('display_errors', 0);
}

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

  • การตั้งค่า API URL: ในสภาพแวดล้อม development คุณอาจใช้ API URL ที่เป็น localhost ในขณะที่ในสภาพแวดล้อม production คุณจะใช้ API URL ที่เป็น production server
  • การเปิด/ปิด debugging mode: ในสภาพแวดล้อม development คุณอาจเปิด debugging mode เพื่อช่วยในการ debug โค้ด ในขณะที่ในสภาพแวดล้อม production คุณจะปิด debugging mode เพื่อความปลอดภัยและประสิทธิภาพ

การจัดการคอนฟิก: จัดระเบียบการตั้งค่า

เหตุผลสุดท้ายที่เราใช้ Environment Variables คือเรื่องของการ จัดการคอนฟิก เมื่อแอปพลิเคชันของเรามีขนาดใหญ่ขึ้น การตั้งค่าต่างๆ ก็จะมีมากขึ้นตามไปด้วย การเก็บการตั้งค่าเหล่านี้ไว้ในที่เดียว (เช่น ไฟล์ .env) จะช่วยให้เราสามารถจัดการการตั้งค่าของแอปพลิเคชันได้ง่ายขึ้น

นอกจากนี้ การใช้ Environment Variables ยังช่วยให้เราสามารถกำหนดค่า default สำหรับการตั้งค่าต่างๆ ได้ ในกรณีที่ Environment Variable นั้นไม่ได้ถูกกำหนดไว้

ตัวอย่าง:

สมมติว่าเรามี Environment Variable ที่ชื่อว่า CACHE_TTL ซึ่งระบุระยะเวลาในการ cache ข้อมูล (ในหน่วยวินาที) ถ้า Environment Variable นี้ไม่ได้ถูกกำหนดไว้ เราจะใช้ค่า default เป็น 3600 วินาที (1 ชั่วโมง):

<?php

$cacheTTL = getenv('CACHE_TTL') ?: 3600;

// ใช้ $cacheTTL ในการกำหนดระยะเวลาในการ cache ข้อมูล

ในตัวอย่างนี้ เราใช้ operator ?: (null coalescing operator) เพื่อกำหนดค่า default ให้กับ $cacheTTL ถ้า getenv('CACHE_TTL') คืนค่า null (ซึ่งหมายความว่า Environment Variable CACHE_TTL ไม่ได้ถูกกำหนดไว้) $cacheTTL จะมีค่าเป็น 3600

สรุป:

Environment Variables มีประโยชน์มากมายในการพัฒนาแอปพลิเคชัน PHP ของเรา ไม่ว่าจะเป็นเรื่องของความปลอดภัย ความยืดหยุ่น หรือการจัดการคอนฟิก การใช้ Environment Variables จะช่วยให้เราพัฒนาแอปพลิเคชันได้อย่างมีประสิทธิภาพและปลอดภัยยิ่งขึ้น

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

Office.in.th Custom Service

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

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

查看软件开发服务