2009-08-07 30 views
10

Tôi cần định dạng tệp cấu hình tốt. Tôi có kế hoạch đưa vào lược đồ bảng. Giống như symfony, ruby ​​on rail, vv Định dạng file tốt nhất cho file cấu hình là gì? Yaml hoặc tệp mã hóa XML hoặc JSON? Cái nào là tốt nhất cho mục đích này?Định dạng tệp tốt nhất cho tệp cấu hình là gì?

+0

Bạn biết rằng nếu bạn chấp nhận nhiều câu hỏi hơn, bạn nhận được nhiều đại diện hơn, phải không? –

Trả lời

13

Như những người khác đã nêu, bạn có vô số tùy chọn. Chỉ cần không phát minh ra (ví dụ: viết phân tích cú pháp) một điều như vậy cho mình trừ khi bạn có một lý do thực sự, thực sự tốt để làm như vậy (không thể nghĩ ra bất kỳ).Chỉ cần đánh giá các lựa chọn của bạn:

  • Bạn cần phải truy cập vào dữ liệu này bất cứ nơi nào bên ngoài ứng dụng của tôi (với ngôn ngữ khác)
  • Bạn có muốn sử dụng (hoặc chính bạn) để có thể chỉnh sửa các tập tin sử dụng một trình soạn thảo văn bản đơn giản
  • bạn có cần tương thích ngược với các phiên bản cũ của ngôn ngữ được sử dụng

Ví dụ, PHP cung cấp serialize rất dễ dàng() và unserialize() chức năng. Tuy nhiên, định dạng này không dễ dàng đọc được/có thể chỉnh sửa được bởi con người (XML cũng có thể khó đọc, nhưng không khó như định dạng PHP. Mô đun pickle của Python thậm chí còn tồi tệ hơn.). Nếu bạn cần truy cập dữ liệu bằng các ngôn ngữ khác thì đây là một lựa chọn không tốt. Và suy nghĩ về những người khác - Gần đây tôi đã từng phân tích cú pháp dữ liệu tuần tự hóa PHP từ dự án Horde trong một dự án python của tôi! JSON là một lựa chọn tốt hơn nhiều bởi vì nó có thể đọc được (nếu nó được in đẹp, không phải ở dạng nén!), Ngôn ngữ chính có thể chỉnh sửa và mọi ngôn ngữ chính đều hỗ trợ JSON ngày nay. Tuy nhiên, bạn sẽ mất khả năng tương thích ngược, ví dụ: với python, JSON yêu cầu phiên bản 2.6+.

+1

Tôi có vấn đề với một phần của câu trả lời: XML không dễ đọc/chỉnh sửa được bằng con người như thế nào? Đó là một trong những lợi thế lớn của nó. (Đó là chi tiết hơn JSON, và không có gì sai với JSON) – ViennaMike

+1

Vâng, bạn đang phải ở chỗ nó dễ đọc hơn nhiều so với định dạng tuần tự hóa của PHP hoặc dưa chua. Nhưng nó cũng cực kỳ tiết tấu, mà tôi thấy mất tập trung khi đọc và cồng kềnh khi viết. Có một loại phần mềm toàn bộ được gọi là "biên tập viên XML" vì một lý do;) – c089

+0

Tôi đã thay đổi câu trả lời để đọc "không dễ dàng". – c089

1

Bạn dự định đưa gì vào đó?

Bạn có vô số lựa chọn:

  • XML với các thẻ tùy chỉnh
  • Cặp khóa-giá trị gia tăng trên mỗi dòng mới
  • SQLite?
+1

Tôi không khuyên bạn nên sử dụng SQLite làm cấu hình vì bạn sẽ cần một công cụ máy khách SQLite để thiết lập ứng dụng của bạn và bạn cũng cần phải làm quen với các truy vấn SQL. – RaYell

13

*.ini nên được khá tốt cho điều đó

[MyApp] 
var1 = "foo" 
var2 = "bar" 

[MyPlugin] 
var1 = "qwe" 

Bạn có thể dễ dàng đọc nó bằng cách sử parse_ini_file()

$config = parse_ini_file('/path/to/config/file', true); 
echo $config['MyApp']['var2']; 
+0

Câu trả lời hay. Đặc biệt nếu dài hạn phạm vi ngôn ngữ vẫn là PHP. Tôi sử dụng tập tin .ini tất cả các thời gian như là "đòn bẩy và núm điều khiển" của tôi trong các ứng dụng của tôi. – pimbrouwers

+0

Ini có hỗ trợ nhiều chuỗi không? – starbeamrainbowlabs

2

XML là tốt nhất cho mục đích này như hầu hết các lập trình langauge API privide để đọc file XML .

+9

XML là nỗi đau để duy trì. –

+2

... và XML chậm! – Marecky

+0

xml được tạo ra bởi ma quỷ .. – slier

0

Joomla gần đây đã chuyển từ tệp ini sang tệp được mã hóa JSON. Mã hóa và giải mã json bằng cách sử dụng json_encode()json_decode() hoạt động tốt hơn việc đọc và ghi các tệp ini.

Có một nhược điểm tuy nhiên: json không dễ đọc cho con người. Bạn cần sử dụng tập lệnh php để mã hóa tệp cấu hình của mình. Bạn có thể sử dụng giải pháp này tốt khi bạn muốn viết cấu hình của mình trong phần quản trị viên của trang web.

+5

Tôi có thể nói JSON khá nhiều người có thể đọc được (trái ngược với định dạng tuần tự hóa chuẩn của PHP). –

3

JSON là một lựa chọn tốt, theo ý kiến ​​của tôi. Bạn có thể xác định lược đồ cơ sở dữ liệu của mình như sau:

{ 
    table1: { 
     id: { 
      type:"int", 
      autoincrement:true 
     }, 
     some_field: { 
      type:"string", 
     } 
    }, 
    table2: { // etc 
    } 
} 

Sau đó chỉ cần sử dụng json_decode để biến điều này thành mảng PHP.

ví dụ:

$tables = json_decode($json_text); 
foreach ($tables as $tablename => $t) { 
    foreach ($t as $fieldname => $field) { 
     echo "Table {$tablename} has a record called {$fieldname}"; 
    } 
} 

này sẽ in: Table table1 has a record called id Table table1 has a record called some_field

JSON là dễ dàng hơn để làm việc với hơn XML trong quan điểm của tôi, và json_encode/giải mã rất nhanh nên có rất ít chi phí. Theo tôi, nó cũng dễ đọc hơn XML và đối phó tốt hơn với các cấu trúc dữ liệu phức tạp hơn các tệp INI. Một số người thích YAML, nhưng thực sự không có nhiều khác biệt về cú pháp.

1

sở thích của tôi là

  1. cũng ghi tập tin php
  2. cơ sở dữ liệu cho cấu hình cụ thể sử dụng

giống như wordpress và vô số các ứng dụng php khác sử dụng

0

Các chàng trai đã thực sự đưa cho bạn câu trả lời tốt rồi. Cá nhân tôi thích tệp .ini bên ngoài gốc tài liệu của bạn. Ngoài ra hãy chắc chắn (nếu bạn đang ở trên một máy chủ lưu trữ Linux env) rằng tập tin của bạn chỉ có thể đọc được bởi máy chủ web của bạn và không thể ghi.

Sau đó bạn có thể phân tích cú pháp tệp INI và sử dụng các cài đặt cấu hình của bạn như thế. (điều này là nếu bạn đang sử dụng một ngôn ngữ như PHP hay như vậy, JavaScript ect sẽ không hoạt động tại đây.)

Nhưng nó giống như họ đã nói. Tất cả phụ thuộc vào dữ liệu bạn muốn có trong tập tin cấu hình của bạn và những gì bạn muốn làm với nó.

Kính trọng Conrad c '',)

Các vấn đề liên quan