Các tùy chọn tôi thấy có điểm tương đối / điểm yếu là:
Cơ chế dựa trên tệp
Những điều này yêu cầu mã của bạn phải tìm ở các vị trí cụ thể để tìm tệp ini. Đây là một vấn đề khó giải quyết và luôn xuất hiện trong các ứng dụng PHP lớn. Tuy nhiên, bạn có thể sẽ cần giải quyết vấn đề để tìm mã PHP được kết hợp / sử dụng lại trong thời gian chạy.
Các cách tiếp cận phổ biến cho điều này là luôn sử dụng các thư mục tương đối hoặc tìm kiếm từ thư mục hiện tại trở lên để tìm một tệp có tên riêng trong thư mục cơ sở của ứng dụng.
Các định dạng tệp phổ biến được sử dụng cho tệp cấu hình là mã PHP, tệp được định dạng ini, JSON, XML, YAML và PHP được tuần tự hóa
Mã PHP
Điều này cung cấp một lượng lớn tính linh hoạt để biểu diễn các cấu trúc dữ liệu khác nhau và (giả sử nó được xử lý thông qua bao gồm hoặc yêu cầu) mã được phân tích cú pháp sẽ có sẵn từ bộ nhớ cache opcode - mang lại lợi ích về hiệu suất.
Đường bao gồm cung cấp một phương tiện để trừu tượng hóa các địa điểm tiềm năng của tập tin mà không dựa vào mã bổ sung.
Mặt khác, một trong những lý do chính để tách cấu hình khỏi mã là phân tách trách nhiệm. Nó cung cấp một lộ trình để đưa mã bổ sung vào thời gian chạy.
Nếu cấu hình được tạo từ một công cụ, có thể xác thực dữ liệu trong công cụ, nhưng không có chức năng chuẩn nào để thoát dữ liệu để nhúng vào mã PHP như tồn tại đối với HTML, URL, câu lệnh MySQL, lệnh shell ... .
Dữ liệu được tuần tự hóa
Điều này tương đối hiệu quả đối với lượng cấu hình nhỏ (lên đến khoảng 200 mục) và cho phép sử dụng bất kỳ cấu trúc dữ liệu PHP nào. Nó yêu cầu rất ít mã để tạo / phân tích cú pháp tệp dữ liệu (vì vậy, thay vào đó bạn có thể dành nỗ lực của mình để đảm bảo rằng tệp chỉ được viết với sự ủy quyền thích hợp).
Việc thoát nội dung được ghi vào tệp được xử lý tự động.
Vì bạn có thể tuần tự hóa các đối tượng, nó tạo cơ hội cho việc gọi mã chỉ đơn giản bằng cách đọc tệp cấu hình (phương thức phép thuật __wakeup).
Tệp có cấu trúc
Lưu trữ nó dưới dạng tệp INI theo đề xuất của Marcel hoặc JSON hoặc XML cũng cung cấp một api đơn giản để ánh xạ tệp vào cấu trúc dữ liệu PHP (và ngoại trừ XML, để thoát dữ liệu và tạo tệp) trong khi loại bỏ lệnh gọi mã lỗ hổng bảo mật bằng cách sử dụng dữ liệu PHP được tuần tự hóa.
Nó sẽ có các đặc điểm hiệu suất tương tự như dữ liệu được tuần tự hóa.
Lưu trữ cơ sở dữ liệu
Điều này được coi là tốt nhất khi bạn có một lượng lớn cấu hình nhưng phải chọn lọc những gì cần thiết cho tác vụ hiện tại - Tôi đã rất ngạc nhiên khi thấy rằng với khoảng 150 mục dữ liệu, việc truy xuất dữ liệu từ phiên bản MySQL cục bộ nhanh hơn là hủy số liệu hóa một tệp dữ liệu.
OTOH không phải là nơi tốt để lưu trữ thông tin xác thực bạn sử dụng để kết nối với cơ sở dữ liệu của mình!
Môi trường thực thi
Bạn có thể đặt giá trị trong môi trường thực thi mà PHP đang chạy.
Điều này loại bỏ bất kỳ yêu cầu nào đối với mã PHP để tìm kiếm ở một vị trí cụ thể cho cấu hình. OTOH nó không mở rộng quy mô tốt với lượng lớn dữ liệu và rất khó thay đổi trên toàn cầu trong thời gian chạy.
Trên khách hàng
Một nơi mà tôi chưa đề cập để lưu trữ dữ liệu cấu hình là ở máy khách. Một lần nữa, chi phí mạng có nghĩa là điều này không mở rộng tốt với số lượng lớn cấu hình. Và vì người dùng cuối có quyền kiểm soát dữ liệu, dữ liệu đó phải được lưu trữ ở định dạng mà mọi hành vi giả mạo đều có thể phát hiện được (tức là với chữ ký mật mã) và không được chứa bất kỳ thông tin nào bị xâm phạm bởi việc tiết lộ (tức là được mã hóa có thể đảo ngược).
Ngược lại, điều này có rất nhiều lợi ích cho việc lưu trữ thông tin nhạy cảm thuộc sở hữu của người dùng cuối - nếu bạn không lưu trữ thông tin này trên máy chủ, nó không thể bị đánh cắp từ đó.
Thư mục mạng
Một nơi thú vị khác để lưu trữ thông tin cấu hình là trong DNS / LDAP. Điều này sẽ hiệu quả đối với một số lượng nhỏ thông tin - nhưng bạn không cần phải tuân theo dạng thông thường đầu tiên - hãy xem xét, ví dụ như SPF .
Cơ sở hạ tầng hỗ trợ bộ nhớ đệm, sao chép và phân phối. Do đó, nó hoạt động tốt cho các cơ sở hạ tầng rất lớn.
Hệ thống kiểm soát phiên bản
Cấu hình, như mã nên được quản lý và kiểm soát phiên bản - do đó, lấy cấu hình trực tiếp từ hệ thống VC của bạn là một giải pháp khả thi. Nhưng thường thì điều này đi kèm với chi phí hiệu suất đáng kể, do đó, bộ nhớ đệm có thể được khuyến khích.