Yapılandırma dosyası için en iyi dosya formatı nedir?

8 Cevap

Ben iyi bir yapılandırma dosyası biçiminde gerekir. Ben tablo şema koyarak planlıyoruz. Symfony gibi, yapılandırma dosyası için en iyi dosya formatı nedir, vb raylar üzerinde ruby? Yaml veya XML veya JSON dosyasını kodlanmış? Hangi bu amaç için en iyi nedir?

8 Cevap

Diğerleri de belirtildiği gibi, seçenekler yükler var. Bunu yapmak için gerçekten iyi bir neden (herhangi düşünemiyorum) yoksa sadece böyle bir şeyi kendiniz (yani yazma ayrıştırıcılarını) icat etmiyoruz. Sadece seçenekleri değerlendirmek:

  • (Başka bir dil ile) herhangi bir yerde benim uygulama dışında bu verilere erişmek gerekiyor
  • Kullanıcıların (ya da kendinizi) basit bir metin düzenleyicisi kullanarak dosyayı düzenlemek için güçlü olmak ister misiniz
  • Eğer kullanılan dil eski sürümleri ile geriye dönük uyumluluk ihtiyacınız var mı

Örneğin, PHP çok kolay serialize () ve unserialize () fonksiyonları sağlar. Biçimi, ancak, (XML olarak da sert PHP biçimi olarak. Python Turşu modülü bile kötü değil okumak zor olabilir, ama olabilir.) Gibi kolayca okunabilir / düzenlenebilir insanlar tarafından değil. Hiç başka dillerde verilere erişmek için gerekiyorsa, bu kötü bir seçimdir. Ve başkaları hakkında düşünmek - Geçenlerde şapka benim bir python projesinde Horde projesi PHP serialized verileri ayrıştırmak için! JSON çok daha iyi bir seçimdir çünkü onun okunabilir-insan (onun "güzel basılmış", sıkıştırılmış formda! Değilse), insan-düzenlenebilir ve her büyük dil günümüzde JSON desteği vardır. Ancak, geriye dönük uyumluluk, örneğin kaybedersiniz python ile, JSON sürüm 2.6 + gerektirir.

*.ini Bunun için oldukça iyi olmalıdır

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

[MyPlugin]
var1 = "qwe"

Kolayca kullanarak okuyabilirsiniz parse_ini_file()

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

JSON iyi bir seçim bence, olduğunu. Sen gibi veritabanı şeması tanımlayabilirsiniz:

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

Sonra sadece json_decode PHP diziye bu çevirmek için kullanın.

örneğin

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

This would print: Table table1 has a record called id Table table1 has a record called some_field

JSON Bence XML daha çalışmak çok daha kolay ve az yük var bu yüzden json_encode / kod çözme çok hızlı. Bence, aynı zamanda XML çok daha okunabilir ve INI dosyaları daha karmaşık veri yapıları ile daha iyi baş edebiliyor. Bazı insanlar YAML tercih, ancak sözdizimi çok fark gerçekten orada değil.

XML dosyalarını okumak için en programlama dildeki privide API olarak bu amaç için en iyisidir.

Orada koyarak ne planlıyorsunuz?

Sen seçenekleri yükler var:

  • Özel etiketler ile XML
  • Her yeni satırda anahtar-değer çiftleri
  • SQLite?

Joomla son zamanlarda json kodlanmış dosyalar ini dosyaları geçti. Kodlama ve json_encode() ve json_decode() ini dosyaları okuma ve yazma daha iyi performans kullanarak çözme json.

Bir dezavantajı var; json kolayca insan okunabilir değildir. Siz config dosyasını kodlamak için bir php komut dosyası kullanmanız gerekir. Web sitenizin bir yönetici kısmında sizin yapılandırma yazmak istediğinizde de bu çözümü kullanabilirsiniz.

benim tercih

  1. iyi belgelenmiş php dosyası
  2. kullanıcıya özel yapılandırma için bir veritabanı

sadece wordpress ve sayısız diğer php uygulamaları kullanımı gibi

Adamlar gerçekten size zaten iyi cevap verdik. Şahsen ben beğendim. Belge kök dışında ini dosyaları. Ayrıca emin olun dosya, web sunucusu ve yazılabilir değil, sadece okunabilir olduğunu (bir linux hosting env'in iseniz).

Daha sonra sadece INI dosyası ayrıştırmak ve bunun gibi yapılandırma ayarlarını kullanabilirsiniz. (Eğer PHP gibi bir dil kullanarak konum ya da öylesine, JavaScript vb burada çalışmaz eğer bu.)

Dediler gibi ama öyle. Bu, tüm config dosyanızda ve ne onunla todo istiyorum olmasını istediğiniz ne veri bağlıdır.

Regards Conrad c'',)