Như bạn đã nói, cách dễ nhất là sử dụng tệp cấu hình.
Nhiều khuôn khổ sử dụng điều này ( Zend
, CakePHP
, Kohana
, v.v.) và đó là cách làm phổ biến nhất (ngay cả trong môi trường không phải PHP, chẳng hạn như ASP.NET với web.config
của nó các tập tin). Điều này cho phép bạn cũng sao chép các giá trị cấu hình từ môi trường này sang môi trường khác bằng cách chỉ sao chép các tệp cho trang web, đây là lợi ích so với việc dựa vào các biến môi trường do máy chủ thiết lập (có thể rất nhanh bị mất và bị lãng quên).
Bạn không cần phải lo lắng về việc mật khẩu bị xáo trộn vì nó không phải là một tệp có thể truy cập được trên toàn thế giới, nó chắc chắn không thể truy cập web. Ý tôi muốn nói ở đây là bạn sẽ a) Yêu cầu máy chủ web không cung cấp tệp cấu hình của bạn ( IIS
đã thực hiện điều này với web.config
và phân phát trạng thái HTTP 404.8 thay vì nội dung) hoặc b) Di chuyển nó ra bên ngoài thư mục được phục vụ trên web của bạn. Nếu ai đó có thể nhìn thấy tệp cấu hình của bạn, thì điều đó còn tệ hơn việc có tệp đó trong mã nguồn của bạn.
Bạn cũng nên có phiên bản cơ sở (trống / mặc định) của tệp cấu hình và tách nó ra theo từng môi trường để bạn có thể có tệp cấu hình khác cho các nền tảng sản xuất, phát triển và thử nghiệm.
Biến môi trường là cách phổ biến nhất để phân biệt giữa các môi trường này, giống như đoạn mã dưới đây:
// Check if it's been set by the web server
if (!empty($_ENV['ENVIRONMENT'])) {
// Copy from web server to PHP constant
define('ENVIRONMENT', $_ENV['ENVIRONMENT']);
}
if (!defined('ENVIRONMENT')) {
// Default to development
define('ENVIRONMENT', 'development');
}
// Load in default configuration values
require_once 'config.default.php';
// Load in the overridden configuration file for this environment
require_once 'config.' . ENVIRONMENT . '.php';
Một cách khác khá phổ biến là sử dụng tệp cấu hình XML và chỉ đọc các giá trị mà bạn cần nếu thích hợp (lưu trữ bản sao đã lưu trong bộ nhớ cache của tệp cấu hình trong bộ nhớ). Điều này có thể rất dễ bị hạn chế chỉ tải ở một số giá trị nhất định, thay vì cho phép đưa vào các tệp PHP một cách tùy ý và về tổng thể, đây là một giải pháp tốt hơn theo quan điểm của tôi, nhưng những điều trên sẽ giúp bạn bắt đầu đúng hướng.
Có thể bạn sẽ muốn có VCS của mình để bỏ qua tệp. Mặt khác, bạn có thể muốn một khung của tệp hoặc một khung có giá trị mặc định hợp lý (tất nhiên, cái sau không áp dụng cho dữ liệu đăng nhập), được kiểm soát phiên bản. Một cách phổ biến để giải quyết vấn đề đó là có tệp cấu hình mẫu đã đăng ký và quy trình cài đặt sao chép tệp đó vào vị trí của tệp cấu hình thực, nơi nó được tùy chỉnh. Đây có thể là quy trình thủ công hoặc tự động.
(Mặc dù hơi không liên quan đến câu hỏi chính, việc giới thiệu một hằng số cho môi trường của bạn cho phép bạn thực hiện một số công việc thú vị khác như trì hoãn triển khai thư giả thay vì thực hiện một SMTP một, nhưng tất nhiên điều này cũng có thể được thực hiện với một tệp cấu hình)