Mọi người đều có sở thích riêng của họ. Tôi muốn lưu trữ các cài đặt DB của mình trong một tệp .ini bên ngoài webroot và sau đó đặt cho nó giá trị chmod 0600, để ngăn không cho bất kỳ ai ngoài chủ sở hữu đọc nó.
Một ví dụ .ini sẽ giống như sau:
[database]
driver = mysql
host = localhost
;port = 3306
schema = yourdbname
username = dbusername
password = some_pass
Sau đó, bạn có thể sử dụng hàm php parse_ini_file
sau đó trong hàm tạo của bạn, bạn chỉ cần đọc nó và phân tích cú pháp nó thành một mảng:
public function __construct($file = 'dbsettings.ini')
{
// @todo: change this path to be consistent with outside your webroot
$file = '../' . $file;
if (!$settings = parse_ini_file($file, TRUE)) throw new exception('Unable to open ' . $file . '.');
$dns = $settings['database']['driver'] .
':host=' . $settings['database']['host'] .
((!empty($settings['database']['port'])) ? (';port=' . $settings['database']['port']) : '') .
';dbname=' . $settings['database']['schema'];
// if not PDO, this part needs to be changed parent::__construct($dns, $settings['database']['username'], $settings['database']['password']);
}
Và viola, bạn có một cách đơn giản và an toàn để thiết lập kết nối cơ sở dữ liệu của mình. Lớp này được lấy từ lớp bộ mở rộng PDO, vì vậy nếu bạn không sử dụng PDO, bạn cần thay đổi dòng đó, nhưng bạn có thể thấy bạn nhận được tên người dùng, v.v. trong $settings
mảng.
Tôi RẤT tránh lưu trữ bất kỳ loại thông tin cơ sở dữ liệu nào vào CONSTANT
hoặc GLOBAL
biến kiểu. Bằng cách này, $settings
chỉ có sẵn cho hàm lớp đó và không có gì khác, cung cấp thêm một chút lớp bảo mật.