Herkese açık web uygulamaları yapılandırma için neden ini dosyaları kullanmıyor?


10

Hemen hemen her genel CMS veritabanı ayarları için bir .php yapılandırma dosyası kullanır. Örneğin, WordPress yüklediğinizde otomatik olarak bir .php yapılandırma dosyası oluşturur.

Neden sadece .ini dosyası kullanmıyorlar? PHP zaten parse_ini_file () var ve eminim diğer diller benzer fonksiyonlara sahip.

Yanıtlar:


9

Özellikle PHP ile; bir .ini dosyası ile .conf.php dosyası arasındaki fark göz ardı edilebilir.

PHP'yi doğrudan yapılandırma için kullanmak, yapılandırma için yalnızca iyi tanımlanmış, taşınabilir bir sözdizimi ile ilgili olma ihtiyacı duymanın belirgin bir avantajına sahiptir ve yapılandırma dosyasının düzgün kod olması gerçeği bazen yararlıdır.

Buna kıyasla; bir ini dosyasının sunabileceği çok az şey vardır; ve include, requireve require_oncetüm iyi bilinmektedir ve (çoğunlukla) iyi anlaşılmış.


relate to one well-defined, portable syntax for configurationAnlamıyorum. ini dosyaları da iyi tanımlanmış ve taşınabilir bir sözdizimine sahiptir. Her .conf.phpdosyanın kendi yapısı vardır, çoğu dizi tabanlıdır, ancak bu bir ini dosyasından çok farklı değildir.
yannis

7
Ayrıca bir PHP dosyasının bazı temel güvenlik sağlayabileceğini unutmayın. Joomla .ini, yapılandırmayı depolamak için XML veya dosyalar kullansaydı, şüphesiz yapılandırmanın herkese açık olarak erişildiği yerde çalışan çok sayıda yanlış yapılandırılmış örnek olurdu, bu genellikle iyi bir şey değildir. PHP dosyaları ile, bir sunucunun içeriğini bir ziyaretçiye sunmak için yanlış yapılandırılması çok, çok nadir olacaktır.
Tom Marthenal

4

Genel olarak konuşursak .iniXML yapılandırma dosyaları tercih ederim . Daha büyük sistemlerde, genellikle geliştiriciden başka birinin bir yapılandırma değerini, muhtemelen bir DBA veya bir sistem yöneticisi değiştirmesi gerekir. Bildiğim çoğu DBA ve sistem yöneticileri basit bir PHP betiği ile gezinirken herhangi bir sorun yaşamazlardı, ama yapmazlarsa tercih ederim. Buradaki küçük bir hata, tüm uygulamaya oldukça az yolla zarar verebilir.

Ancak daha küçük sistemlerde, yapılandırma için PHP komut dosyaları kullanmak son derece uygundur. Bugün yapılandırma için bir PHP komut dosyası kullanan AWS SDK ile oynuyordum :

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

Sabit kodlama yerine default_cache_config, sistem sıcaklığını geçiyorum ve bu komut dosyasını dağıttığım her sistemde işe yarayacaktır. Bu senaryo, yaklaşık 10 geliştiriciden geçecek küçük bir kavram kanıtıdır ve düşünülecek çok şey olsa da, onları olduğu gibi çalıştırmasını istiyorum. Prototip gelişirse, XML yapılandırma sınıfımla sıkı sıkıya bağlayacağım (ve açıkçası dosya sistemi önbelleğine güvenmeyeceğim).


"Buradaki küçük bir hata, tüm uygulamaya oldukça az zarar verebilir." Sanki ini için geçersiz değerler olmaz mıydı? Yoksa bu XML herhangi bir dost mu?
whatsisname

@whatsisname Genellikle yanlış ayarlanmış bir yapılandırma değeri sisteminizi frenlerse, sorunlarınız başka yerlerde olur. Ben aşırı bir şey, bir kereden fazla deneyimli bir şey yapıyor script yapılandırma kasıtsız kod parçası daha düşünüyordum. Bu, ini / xml dosyası ile imkansızdır, asıl mesele, bir komut dosyası yapılandırmasının geliştirici olmayanlarla paylaşmak istediğiniz bir şey olmamasıdır.
yannis

3

Cevap basit: Bir conf.php'nin çalışması için temel olarak sıfır iş gerekir. Bu sadece başka bir kaynak dosya.


0

Önbelleksiz hız da bunun nedeni olabilir. Gerekirse PHP config şeffaf bir şekilde opcode önbelleklenebilir. Oysa INI dosyasının her okunduğunda metin ayrıştırılması ve önbelleği kendiniz oluşturmanız gerekir. Küçük dosyalar için sorun değil, ancak her istekte yüzlerce satır ayrıştırıldığında onlarca milisaniyeye yükselebilir, bu da 200 msn optimize edilmiş web için oldukça fazladır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.