Göreceli yarar / zayıflıklarla gördüğüm seçenekler şunlardır:
Dosya tabanlı mekanizmalar
Bunlar, ini dosyasını bulmak için kodunuzun belirli konumlara bakmasını gerektirir. Bu, çözülmesi zor bir sorundur ve büyük PHP uygulamalarında her zaman ortaya çıkan bir sorundur. Bununla birlikte, çalışma zamanında eklenen / yeniden kullanılan PHP kodunu bulmak için muhtemelen sorunu çözmeniz gerekecektir.
Buna genel yaklaşımlar, her zaman göreceli dizinleri kullanmak veya uygulamanın temel dizininde özel olarak adlandırılmış bir dosya bulmak için geçerli dizinden yukarı doğru arama yapmaktır.
Yapılandırma dosyaları için kullanılan yaygın dosya biçimleri PHP kodu, ini biçimli dosyalar, JSON, XML, YAML ve serileştirilmiş PHP'dir
PHP kodu
Bu, farklı veri yapılarını temsil etmek için büyük miktarda esneklik sağlar ve (dahil etme veya gerektirme yoluyla işlendiğini varsayarsak) ayrıştırılan kod, işlem kodu önbelleğinden kullanılabilir - performans avantajı sağlar.
İnclude_pathınız ek kod dayanmadan dosyanın potansiyel yerleri soyutlayarak için bir araç sağlar.
Öte yandan, yapılandırmayı koddan ayırmanın ana nedenlerinden biri sorumlulukları ayırmaktır. Çalışma zamanına ek kod eklemek için bir yol sağlar.
Konfigürasyon bir araçtan oluşturulmuşsa, araçtaki verileri doğrulamak mümkün olabilir, ancak HTML, URL'ler, MySQL ifadeleri, kabuk komutları için olduğu gibi PHP koduna gömmek için veriden çıkış yapmak için standart bir işlev yoktur ... .
Serileştirilmiş veri
Bu, küçük miktarlarda yapılandırma (yaklaşık 200 öğeye kadar) için nispeten etkilidir ve herhangi bir PHP veri yapısının kullanımına izin verir. Veri dosyasını oluşturmak / ayrıştırmak için çok az kod gerektirir (böylece çabalarınızı dosyanın yalnızca uygun yetkilendirme ile yazılmasını sağlamak için harcayabilirsiniz).
Dosyaya yazılan içeriğin kaçması otomatik olarak yapılır.
Nesneleri serileştirebildiğiniz için, sadece yapılandırma dosyasını (__wakeup sihirli yöntemi) okuyarak kodu çağırmak için bir fırsat yaratır.
Yapılandırılmış dosya
Marcel veya JSON veya XML tarafından önerildiği gibi bir INI dosyası olarak saklamak, aynı zamanda dosyayı bir PHP veri yapısına eşlemek için basit bir api sağlar (ve XML dışında, verilerden kaçmak ve dosyayı oluşturmak için) kod çağrısını ortadan kaldırır. serileştirilmiş PHP verilerini kullanan güvenlik açığı.
Serileştirilmiş verilere benzer performans özelliklerine sahip olacaktır.
Veritabanı depolama
Bu, en iyi şekilde, büyük miktarda yapılandırmanız olduğunda, ancak mevcut görev için neyin gerekli olduğu konusunda seçici olduğunuzda dikkate alınır - yaklaşık 150 veri öğesinde, verileri yerel bir MySQL örneğinden almanın verilere göre daha hızlı olduğunu görünce şaşırdım. bir veri dosyasını seri hale getirmeyin.
OTOH, veritabanınıza bağlanmak için kullandığınız kimlik bilgilerini saklamak için iyi bir yer değildir!
Yürütme ortamı
Değerleri PHP'nin içinde çalıştığı yürütme ortamında ayarlayabilirsiniz .
Bu, PHP kodunun yapılandırma için belirli bir yere bakma gereksinimini ortadan kaldırır. OTOH, büyük miktarda veriye iyi ölçeklenmez ve çalışma zamanında evrensel olarak değiştirilmesi zordur.
Müşteride
Yapılandırma verilerini depolamak için bahsetmediğim bir yer, istemcidir. Yine ağ ek yükü, bunun büyük miktarda konfigürasyona iyi ölçeklenmediği anlamına gelir. Ve son kullanıcı veriler üzerinde kontrole sahip olduğu için, herhangi bir tahrifatın tespit edilebildiği bir formatta saklanmalıdır (yani bir kriptografik imza ile) ve ifşası nedeniyle tehlikeye giren herhangi bir bilgi içermemelidir (yani tersine çevrilebilir şekilde şifrelenmiş).
Tersine, son kullanıcının sahip olduğu hassas bilgileri depolamak için bunun birçok yararı vardır - eğer bunu sunucuda saklamıyorsanız, oradan çalınamaz.
Ağ Dizinleri
Yapılandırma bilgilerini depolamak için bir başka ilginç yer de DNS / LDAP'dir. Bu, az sayıda küçük bilgi için işe yarar - ancak 1. normal biçime bağlı kalmanıza gerek yoktur - örneğin SPF'yi düşünün .
Altyapı, önbelleğe alma, çoğaltma ve dağıtımı destekler. Bu nedenle çok büyük altyapılar için iyi çalışıyor.
Sürüm Kontrol sistemleri
Kod gibi yapılandırma da yönetilmeli ve sürüm kontrollü olmalıdır - bu nedenle yapılandırmayı doğrudan VC sisteminizden almak uygun bir çözümdür. Ancak genellikle bu, önemli bir performans yükü ile birlikte gelir, bu nedenle önbelleğe alma tavsiye edilebilir.