my_config.php vs my_config.ini

4 Cevap php

İşte biz önce (Ben gider düşünüyorum çerçevenin kalanını arayarak değişkenleri ayarlamak için bir. Ini dosyası kullanmak

function getConfigVars(){
    //read my_config.ini file
    ....
    //call framework
}

bu şekilde yapmanın bir yararı olmadığını ve ben hep merak etmişimdir.

Bu, daha sonra web bakarak ve php bunu ayrıştırmak ve onu anlamak zorundadır insanları durdurmak için erişim kuralları yazmak zorunda gibi geliyor bana.

Peki, neden my_config.ini kullanmak yerine my_config.php? Onu kurduktan sonra herkes bunu dokunmadan olmalıdır gibi değil ve sadece değişkenleri aramak ve ini değişkenler / hataları için bunu ayrıştırmak kullanıyor olursanız olun IDE otomatik metni tamamlamak var edebilmek için daha uygun görünüyor.

4 Cevap

Bu kullandığınız ne gibi Zend Framework ini biçiminde yazılmış dosyaları ayrıştırır bir yapılandırma ayrıştırır içeren (Zend_Config_Ini), bu sesler.

Config dosyası belge kök yer olmamalı, ve bu belge kök değilse kimse yine de erişebilirsiniz beri o zaman yeniden yazma kuralları gereklidir.

INI biçiminde yapılandırma verileri şifreler ve yapılandırma veri bölümleri arasındaki miras bir hiyerarşi var yeteneği hem de sağlamak için uzmanlaşmıştır. Konfigürasyon verileri hiyerarşileri nokta veya nokta karakteri (.) Ile tuşları ayırarak desteklenmektedir. Bir bölümü iki nokta karakteri (:) ve veri devralınacak olan bölümün adı ile bölüm adı izleyerek uzatmak veya başka bir bölümünden miras olabilir.

Zend_Config_Ini sayfasında.

Zend Framework birden çok yapılandırma parametrelerini, evreleme için bir tane, kalkınma için bir tane ve üretimi için bir tane izin kullanır. Bu aynı zamanda üretim için kolay ayar veritabanı ayarları için, geliştirme ve iki çok farklı ayarları olan sağlar. Içerir nerede ini dosyası kurmak, farklı yollar bulunmaktadır. Bu çok daha kolay geliştirme kapanacaktır olduğunu hemen her şeyi bilerek geliştirmeden üretime kodunu hareket yapar.

Tabii), bu PHP ile mümkün olacaktır, ama (parse_ini_file kullanarak halbuki, daha çeşitli yapılandırma değişkenler ayrıştırma yanı sıra eğer / o kontrolleri yapıyor gerektirir sizin için tüm bu otomatik olarak yapar.

Diğer cevaplar da zaten olmayan programcılar bir yapılandırma değişkeni (siteleri Düzenlemede kullanılan örneğin, site başlığı) olarak ayarlanır sitesinde değişkenleri ve ya bir şey değiştirmeniz gerekebilir dikkat çekti. INI dosyaları anlamak ve daha önce programlanmış hiç kimse için bile okunması kolay.

Şu anda üzerinde çalışıyorum bir web sitesinden bir örnek:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.db.adapter       = "PDO_SQLITE"
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users.db"

resources.view[] =

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-testing.db"

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-dev.db

Bu kod çalıştırmak olabilir hangi çeşitli ortamlar için birden çok veri setleri için son derece kolay hale getirir.

Sizin soru emin olmak için, adil bir noktasını yükseltir.

.ini dosyaların lehine birkaç nokta:

  • Use the file with another language. Hiç vb Perl, Python, Ruby, script özellikle bu dile kolay ve bir PHP dosyasında ayarlarınızı saklanan eğer şans olacak proje ayarlarını erişim için gerekli bir şey yapmak istedim eğer.

  • Human editing of data. Eğer soru, niyetleri ya da değil bunu reddetti rağmen birileri orada alay sonunda olabilir çok muhtemeldir ve bu teknik bir birey olmayabilir. Sadece değişken bildirimlerinde bir demet bile INI biçimi, PHP kodu çok daha az korkutucu olduğunu

  • Updating the settings. Ben oldukça bir PHP dosyası yazma daha yeni bir INI dosyası oluşturmak çok daha kolay olduğunu düşünüyorum. Ancak bu, oldukça öznel, ama kayda değer.

  • Relationship between setting variables. Bu ayarlar bir INI dosyası ile bir hiyerarşi vermek için sezgisel / oldukça kolaydır. Bu da PHP ile mümkün olacağını da o kadar düzgün değildir ve bilgileri saklamak için iç içe ilişkilendirilebilir diziler yapmaya çalışıyorsanız çirkin alabilirsiniz.

(En azından ben bir parçası olduğum olanları) uzağa kökünden kod adil bir miktarda tutmak bunlara ek olarak, "web erişimi karşı korumak zorunda" ini üzerine vuruş en PHP projeleri gibi çoğu senaryolarda alakalı değil klasör ve ayarları genellikle oraya gitmek.

Onlar ayrıştırılması gerekir bir INI dosyasını kullanarak arasında herhangi bir performans farkı ve basitçe dahil (Ve PHP tarafından önbelleğe alınabilir) bir PHP dosyası olup olmadığını bilmek istiyorum çünkü bu soruya gelmek isteyenler için: Evet, orada farklılıklar vardır ama onlar gerçekten önemli değil o kadar küçüktür.

Benim kriter senaryo bir config.ini 20 anahtar / değer çiftleri ve config.php define olarak yazılır aynı 20 anahtar / değer çiftleri dosyası ile dosyası. PHP sürümü Ubuntu Linux 13.04 üzerinde 5.4.9 olduğunu.

key1 = value1
...
key20 = value20

vs

<?php
define("key1", "value1");
...
define("key2", "value20");

Biçimlendirimleri olmak üzere iki test komut:

<?php
$CONF = parse_ini_file("config.ini");

vs

<?php
require_once "config.php";

I-ab -c 25 -n 10000 ile performansı test edilmiştir.

Bir PHP önbellek olmadan Sonuç:

ini: Requests per second:    2660.89 [#/sec] (mean)
php: Requests per second:    2642.28 [#/sec] (mean)

APC PHP önbellek ile sonuçlanır:

ini: Requests per second:    3294.47 [#/sec] (mean)
php: Requests per second:    3307.89 [#/sec] (mean)

Ben, Testlerin birden çok kez koştu doğal sayılar her zaman değişir ama fikir birliği: config.ini biraz daha hızlı hayır PHP önbellek kullanıldığında, config.php biraz hızlıdır Bir PHP önbellek kullanıldığında. Ancak fark karar performansa dayalı olmaması gerektiğini çok küçük.

O işyerinde gerekli ise de o ... yapılandırma değişkenlerini değiştirmek için olmayan bir programcı için daha kolay olabilir.

Ben <?php dikkatli yerleştirme keşfetti ettik ve ?> () hala dosyadan ilgili verileri alacak parse_ini_file iken, görüntülenen onu durduramaz.

Olsa sabitlemek için en iyi yolu, docroot üzerinde yerleştirin ve * erişimi inkar etmektir. Sunucu kurulumu ini.