🔔 ประกาศสำคัญ: อัปเดตชื่อผู้รับเงินใหม่ กรุณาตรวจสอบก่อนชำระเงิน อ่านรายละเอียด →
075-845-490 | 097-165-2449
Line ID: @hostnakhonitech
🎉 โปรโมชั่นพิเศษ! ลด 10% สำหรับลูกค้าใหม่

การตั้งค่า $baseURL ใน CodeIgniter 4 แบบไม่ Hardcode Domain Print

  • 0

การตั้งค่า $baseURL ใน CodeIgniter 4 แบบไม่ Hardcode Domain

การกำหนดค่า $baseURL ใน CodeIgniter 4 โดยไม่ระบุโดเมนแบบตายตัว (Hardcode) ช่วยให้ระบบสามารถย้ายเซิร์ฟเวอร์ เปลี่ยนโดเมน หรือแยก Environment (Development / Production) ได้โดยไม่ต้องแก้ไขโค้ดหลัก ลดความผิดพลาดและเพิ่มความยืดหยุ่นของระบบอย่างมืออาชีพ


วิธีที่ 1: ใช้ไฟล์ .env (แนะนำสำหรับ Production)

เป็นวิธีมาตรฐานของ CodeIgniter 4 และเหมาะสำหรับระบบใช้งานจริง

ขั้นตอนที่ 1: ตั้งค่า Default ในไฟล์ App.php

ตำแหน่งไฟล์: app/Config/App.php

public string $baseURL = 'http://localhost:8080/';

ให้คงค่า Default ไว้แบบนี้ โดยไม่ต้องระบุโดเมนจริงในไฟล์นี้

ขั้นตอนที่ 2: กำหนดค่าในไฟล์ .env

ตำแหน่งไฟล์: /.env (Root ของโปรเจกต์)

app.baseURL = 'https://your-domain.com/'

หมายเหตุ: ต้องมีเครื่องหมาย / ปิดท้ายเสมอ

ข้อดีของวิธีนี้

  • แยกค่า Development และ Production ได้ชัดเจน
  • ไม่ต้องแก้โค้ดเมื่อย้ายเซิร์ฟเวอร์
  • ลดความเสี่ยงด้านความปลอดภัย
  • เหมาะกับระบบที่มี CI/CD

วิธีที่ 2: ตั้งค่า Auto-Detect URL อัตโนมัติ

เหมาะสำหรับงานทดสอบหรือระบบภายใน

ตำแหน่งไฟล์: app/Config/App.php

public string $baseURL = '';

public function __construct()
{
    parent::__construct();
    
    $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
    $this->baseURL = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/';
}

ระบบจะดึง Protocol และ Host ปัจจุบันมาสร้าง URL อัตโนมัติ

ข้อควรระวัง

การดึงค่า Host จาก $_SERVER อาจมีความเสี่ยงด้านความปลอดภัย เช่น Host Header Injection หาก Web Server ไม่ได้ตั้งค่าป้องกันอย่างเหมาะสม จึงไม่แนะนำสำหรับ Production ที่ต้องการความปลอดภัยสูง


เรื่องสำคัญ: Trailing Slash ต้องมีเสมอ

ถูกต้อง ไม่ถูกต้อง
https://example.com/ https://example.com
http://localhost:8080/ http://localhost:8080

หากไม่มีเครื่องหมาย / ปิดท้าย อาจทำให้ฟังก์ชัน base_url() และ site_url() ทำงานผิดพลาด


สรุป

  • ระบบใช้งานจริง: ใช้ไฟล์ .env
  • ระบบทดลอง: ใช้ Auto-Detect ได้
  • Production ควรหลีกเลี่ยงการพึ่งพา $_SERVER โดยตรง

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


Was this answer helpful?

« Back