ตัวเลือกที่ฉันเห็นด้วยข้อดี / จุดอ่อนคือ:
กลไกตามไฟล์
สิ่งเหล่านี้ต้องการให้โค้ดของคุณดูในตำแหน่งเฉพาะเพื่อค้นหาไฟล์ ini นี่เป็นปัญหาที่ยากในการแก้ไขและเป็นปัญหาที่มักเกิดขึ้นในแอปพลิเคชัน PHP ขนาดใหญ่ อย่างไรก็ตามคุณอาจต้องแก้ปัญหาเพื่อค้นหาโค้ด PHP ที่รวม / ใช้ซ้ำในรันไทม์
วิธีการทั่วไปในการนี้คือใช้ไดเร็กทอรีสัมพัทธ์เสมอหรือค้นหาจากไดเร็กทอรีปัจจุบันขึ้นไปเพื่อค้นหาไฟล์ที่มีชื่อเฉพาะในไดเร็กทอรีฐานของแอ็พพลิเคชัน
รูปแบบไฟล์ทั่วไปที่ใช้สำหรับไฟล์กำหนดค่า ได้แก่ โค้ด PHP, ไฟล์ในรูปแบบ, JSON, XML, YAML และ PHP แบบอนุกรม
โค้ด PHP
สิ่งนี้ให้ความยืดหยุ่นอย่างมากในการแสดงโครงสร้างข้อมูลที่แตกต่างกันและ (สมมติว่ามีการประมวลผลผ่านการรวมหรือต้องการ) โค้ดที่แยกวิเคราะห์จะพร้อมใช้งานจากแคช opcode ซึ่งให้ประโยชน์ด้านประสิทธิภาพ
include_pathให้หมายถึงการสรุปสถานที่มีศักยภาพของไฟล์โดยไม่ต้องอาศัยรหัสเพิ่มเติม
ในทางกลับกันสาเหตุหลักประการหนึ่งในการแยกการกำหนดค่าออกจากรหัสคือการแยกความรับผิดชอบ มีเส้นทางสำหรับการฉีดโค้ดเพิ่มเติมลงในรันไทม์
หากการกำหนดค่าถูกสร้างขึ้นจากเครื่องมืออาจเป็นไปได้ที่จะตรวจสอบความถูกต้องของข้อมูลในเครื่องมือ แต่ไม่มีฟังก์ชันมาตรฐานในการหลบหนีข้อมูลสำหรับการฝังลงในโค้ด PHP ตามที่มีอยู่สำหรับ HTML, URLs, คำสั่ง MySQL, คำสั่งเชลล์ ... .
ข้อมูลต่อเนื่อง
สิ่งนี้ค่อนข้างมีประสิทธิภาพสำหรับการกำหนดค่าจำนวนน้อย (สูงสุดประมาณ 200 รายการ) และอนุญาตให้ใช้โครงสร้างข้อมูล PHP ใด ๆ ต้องใช้รหัสเพียงเล็กน้อยในการสร้าง / แยกวิเคราะห์ไฟล์ข้อมูล (ดังนั้นคุณสามารถใช้ความพยายามในการตรวจสอบให้แน่ใจว่าไฟล์นั้นเขียนด้วยการอนุญาตที่เหมาะสมเท่านั้น)
การหลีกเลี่ยงเนื้อหาที่เขียนไปยังไฟล์จะถูกจัดการโดยอัตโนมัติ
เนื่องจากคุณสามารถทำให้เป็นอนุกรมวัตถุได้จึงสร้างโอกาสในการเรียกใช้รหัสได้ง่ายๆโดยการอ่านไฟล์การกำหนดค่า (วิธีมายากล __wakeup)
ไฟล์ที่มีโครงสร้าง
การจัดเก็บเป็นไฟล์ INI ตามที่ Marcel หรือ JSON หรือ XML แนะนำยังมี api ง่ายๆในการแมปไฟล์เข้ากับโครงสร้างข้อมูล PHP (และยกเว้น XML เพื่อหลีกเลี่ยงข้อมูลและสร้างไฟล์) ในขณะที่กำจัดการเรียกโค้ด ช่องโหว่โดยใช้ข้อมูล PHP แบบอนุกรม
จะมีลักษณะการทำงานที่คล้ายคลึงกับข้อมูลที่ทำให้เป็นอนุกรม
การจัดเก็บฐานข้อมูล
นี่เป็นข้อพิจารณาที่ดีที่สุดในกรณีที่คุณมีการกำหนดค่าจำนวนมาก แต่มีการคัดเลือกในสิ่งที่จำเป็นสำหรับงานปัจจุบัน - ฉันรู้สึกประหลาดใจที่พบว่ามีรายการข้อมูลประมาณ 150 รายการการดึงข้อมูลจากอินสแตนซ์ MySQL ภายในเครื่องทำได้เร็วกว่า ยกเลิกการกำหนดค่าเริ่มต้นของดาต้าไฟล์
OTOH ไม่ใช่สถานที่ที่ดีในการจัดเก็บข้อมูลประจำตัวที่คุณใช้เชื่อมต่อกับฐานข้อมูลของคุณ!
สภาพแวดล้อมการดำเนินการ
คุณสามารถตั้งค่าในสภาพแวดล้อมการดำเนินการที่ PHP กำลังทำงานอยู่
สิ่งนี้จะลบข้อกำหนดใด ๆ สำหรับโค้ด PHP ที่จะค้นหาในตำแหน่งเฉพาะสำหรับการกำหนดค่า OTOH ไม่ได้ปรับขนาดให้เหมาะสมกับข้อมูลจำนวนมากและยากที่จะเปลี่ยนแปลงในระดับสากลที่รันไทม์
บนไคลเอนต์
สถานที่หนึ่งที่ฉันไม่ได้กล่าวถึงสำหรับการจัดเก็บข้อมูลการกำหนดค่าคือที่ไคลเอนต์ อีกครั้งค่าใช้จ่ายของเครือข่ายหมายความว่าสิ่งนี้ไม่สามารถปรับขนาดได้ดีกับการกำหนดค่าจำนวนมาก และเนื่องจากผู้ใช้ปลายทางสามารถควบคุมข้อมูลได้จึงต้องจัดเก็บในรูปแบบที่ตรวจพบการปลอมแปลงใด ๆ (เช่นด้วยลายเซ็นการเข้ารหัส) และไม่ควรมีข้อมูลใด ๆ ที่ถูกบุกรุกโดยการเปิดเผย (เช่นเข้ารหัสย้อนกลับได้)
ในทางกลับกันสิ่งนี้มีประโยชน์มากมายสำหรับการจัดเก็บข้อมูลที่ละเอียดอ่อนซึ่งเป็นของผู้ใช้ปลายทาง - หากคุณไม่ได้จัดเก็บข้อมูลนี้ไว้บนเซิร์ฟเวอร์จะไม่สามารถถูกขโมยจากที่นั่นได้
ไดเรกทอรีเครือข่าย
สถานที่ที่น่าสนใจอีกแห่งในการจัดเก็บข้อมูลการกำหนดค่าคือใน DNS / LDAP นี้จะทำงานสำหรับจำนวนเล็ก ๆ ของชิ้นเล็ก ๆ ของข้อมูล - แต่คุณไม่จำเป็นต้องติดรูปแบบปกติ 1 - พิจารณาเช่นSPF
โครงสร้างพื้นฐานรองรับการแคชการจำลองแบบและการแจกจ่าย ดังนั้นจึงทำงานได้ดีสำหรับโครงสร้างพื้นฐานขนาดใหญ่มาก
ระบบควบคุมเวอร์ชัน
การกำหนดค่าเช่นรหัสควรได้รับการจัดการและควบคุมเวอร์ชันดังนั้นการรับการกำหนดค่าโดยตรงจากระบบ VC ของคุณจึงเป็นโซลูชันที่ทำงานได้ แต่บ่อยครั้งสิ่งนี้มาพร้อมกับค่าใช้จ่ายด้านประสิทธิภาพที่สำคัญดังนั้นอาจแนะนำให้ใช้แคช