Tại sao các ứng dụng web công cộng không sử dụng tệp ini để định cấu hình


10

Hầu như mọi CMS công khai ngoài đó đều sử dụng tệp cấu hình .php cho các cài đặt cơ sở dữ liệu, v.v. Ví dụ: WordPress tự động tạo tệp cấu hình .php khi bạn cài đặt.

Tại sao họ không sử dụng tệp .ini? PHP đã có parse_ini_file () và tôi chắc chắn các ngôn ngữ khác có chức năng tương tự.

Câu trả lời:


9

Với PHP nói riêng; sự khác biệt giữa tệp .ini và tệp .conf.php là không đáng kể.

Sử dụng PHP trực tiếp cho cấu hình có lợi thế khác biệt là chỉ cần liên quan đến một cú pháp di động được xác định rõ ràng cho cấu hình và thực tế là tệp cấu hình là mã đúng đôi khi rất hữu ích.

So với điều đó; một tập tin ini có ít hoặc không có gì để cung cấp; và include, requirerequire_oncetất cả đều nổi tiếng và (hầu hết) được hiểu rõ.


relate to one well-defined, portable syntax for configurationTôi không hiểu điều đó. tập tin ini cũng có một cú pháp được xác định rõ ràng và di động. Mỗi .conf.phptệp có cấu trúc riêng, hầu hết đều dựa trên mảng, nhưng điều đó không quá khác so với tệp ini.
yannis

7
Cũng lưu ý rằng một tệp PHP có thể cung cấp một số bảo mật cơ bản. Nếu Joomla sử dụng XML hoặc .inicác tệp để lưu trữ cấu hình, chắc chắn sẽ có rất nhiều trường hợp được định cấu hình sai khi chạy cấu hình có thể truy cập công khai, điều này thường không phải là một điều tốt. Với các tệp PHP, sẽ rất hiếm khi máy chủ bị định cấu hình sai để phục vụ nội dung của nó cho khách truy cập.
Tom Marthenal

4

Nói chung, tôi thích .inihoặc các tệp cấu hình XML. Trong các hệ thống lớn hơn, thường thì ai đó không phải là nhà phát triển sẽ cần thay đổi giá trị cấu hình, có thể là DBA hoặc sysadmin. Hầu hết các DBA và sysadins mà tôi biết sẽ không gặp vấn đề gì khi điều hướng qua một tập lệnh PHP đơn giản, nhưng tôi thích nếu chúng không như vậy. Một sai lầm nhỏ trong đó có thể gây hại cho toàn bộ ứng dụng theo nhiều cách.

Nhưng trong các hệ thống nhỏ hơn, việc sử dụng các tập lệnh PHP để cấu hình là cực kỳ thuận tiện. Tôi đã chơi xung quanh với AWS SDK ngày hôm nay, nó cũng sử dụng tập lệnh PHP để cấu hình:

CFCredentials::set(array(
    'development' => array(
        'key' => 'xxx',
        'secret' => 'xxxx',
        'default_cache_config' => sys_get_temp_dir(),
        'certificate_authority' => true
    ),
    '@default' => 'development'
));    

Thay vì mã hóa a default_cache_config, tôi chuyển qua temp hệ thống và điều đó sẽ hoạt động trong mọi hệ thống tôi triển khai tập lệnh. Kịch bản này là một bằng chứng nhỏ về khái niệm sẽ được thông qua cho khoảng 10 nhà phát triển và tôi muốn họ chạy nó như hiện tại, với nhiều điều phải suy nghĩ. Nếu nguyên mẫu phát triển, tôi sẽ kết nối nó với lớp cấu hình XML của mình (và rõ ràng sẽ không phụ thuộc vào bộ đệm của hệ thống tệp).


"Một lỗi nhỏ trong đó có thể gây hại cho toàn bộ ứng dụng theo nhiều cách." Như thể giá trị không hợp lệ cho ini sẽ không? Hoặc XML đó là bất kỳ thân thiện hơn?
whatsisname

@whatsisname Thông thường nếu giá trị cấu hình được đặt không chính xác làm hãm hệ thống của bạn, thì vấn đề của bạn sẽ ở nơi khác. Tôi đã suy nghĩ nhiều hơn về một đoạn mã không chủ ý trong cấu hình tập lệnh đang làm một điều gì đó cực đoan, điều mà tôi đã trải nghiệm hơn một lần. Điều đó là không thể với tệp ini / xml, điểm chính là cấu hình tập lệnh không phải là thứ bạn muốn chia sẻ với những người không phải là nhà phát triển.
yannis

3

Câu trả lời rất đơn giản: một conf.php về cơ bản không có công việc nào cần thiết để nó hoạt động. Nó chỉ là một tập tin nguồn khác.


0

Tốc độ mà không có bộ nhớ đệm cũng có thể là lý do. Cấu hình PHP có thể được lưu trữ trong suốt opcode nếu cần. Trong khi đó tệp INI cần được phân tích cú pháp văn bản mỗi lần đọc và bạn cần tự tạo bộ đệm. Đối với các tệp nhỏ thì không sao, nhưng với hàng trăm dòng được phân tích cú pháp cho mỗi yêu cầu, nó có thể tăng lên hàng chục triệu giây, khá nhiều cho web tối ưu 200ms.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.