Saklanması, güncellenmesi, bir veritabanı olmadan bir PHP uygulaması için ayarları alınıyor

4 Cevap php

Bir dosya bir php uygulama için veri depolamak için gerekiyor. PHP kendisi dışındaki dış bağımlılıkları her türlü olmadan bunu yapmak gerekiyor.

İşte var gereksinimleri şunlardır:

  • Ayarlar güncelleme olmayacak eklendi / / çok sık kaldırıldı. Yani ayarlarının güncellenmesi çok verimli olmak zorunda değildir. Ancak, ben değil dosyaları düzenleme sayesinde, tüm bir PHP komut dosyası aracılığıyla bunu yapmak mümkün olmak istiyorum.
  • Ayarlar sürekli okunacak, böylece ayarları okuma çok etkili olması gerekir.
  • Ayarlar Ben onları bir diziye olsaydı $ Ayarlar gibi bir şey ["Database"] ["AccessSettings"] ["Adı"] ["myDBUsername"] olabilir, eşsiz bir biçimde vardır;
    $ Ayarlar ["Database"] ["AccessSettings"] ["Password"] ["myDBPassword"];

Ben yukarıda bahsettiğim gibi dizilerde saklanır ayarları değil tercih ediyorum. Bunun yerine, bazı erişim yöntemleri tercih ediyorum: getConfig ("Database", "Accesssettings", "Kullanıcı Adı") 'myDBUsername' dönecekti. Bunun nedeni, ben küresel kapsamda depolamak.Bu değişkenleri sınırlamak istiyorum.

/ Alma almanın en iyi yolu bu ne olurdu?

Ben belki bir xml dosyasını düşünüyordum hiyerarşiyi, ama ben PHP xml dosyaları (I ekleyebilir, düzenleyebilir ve kaldırmak mümkün olması gerektiğini özellikle gerçeği) erişmek için nasıldı emin değildi. Bu XML olmalıdır eğer xml erişimi ne tür ben içine bakmak gerekir.

Başka biçimi ise, ben bu biçimi kullanmak için nasıl içine bakmak ne için doğru yönde bazı öneriler istiyorum.

4 Cevap

Brian, parse_ini_file ne ihtiyaç vardır.

Ah, PHP üzerinden bu düzenleme olurdum gereksinimi kaçırdı.

Bu durumda bu amaç için kullanabileceğiniz PHP yerli şey yok. Kendi rulo olurdu.

Sadece olsa Zend_Config_Ini ile zaman kendinizi bir ton kurtarabilir. Ben size başka bir şey kullanmak istemiyorum ifade biliyorum, ama Zend Framework ihtiyacınız bunu ne parçaları kullanmak için izin yapılandırılmıştır. Zend_Config o kendi kullanılabilir. Sen kesinlikle sadece proje için bu birkaç sınıfları eklemek ve bunları INI dosyası ayrıştırma ele sağlayabilirsiniz.

İşte yukarıdaki örnekleri kullanarak bir örnek:

[config]
Database.AccessSettings.Username = myDBUsername
Database.AccessSettings.Password = myDBPassword

: Bu kadar basit olarak yüklemek ve bu erişmek istiyorum

$config = new Zend_Config_Ini('/path/to/ini', 'config');
echo $config->Datbase->AccessSettings->Username; // prints "myDBUsername"
echo $config->Datbase->AccessSettings->Password; // prints "myDBPassword"

Lütfen yapılandırma düzenlemek ve kaydetmek için aşağıdakileri kullanabilirsiniz:

$config->Database->AccessSettings->Password = "foobar";
$writer = new Zend_Config_Writer_Ini(array('config'   => $config,
                                           'filename' => 'config.ini'));
$writer->write();

Edit

Insanlar Vog en yanlış yorumlarına dayanarak bu aşağı oylama neden gerçekten emin değilim. Bu özel bir kilit kullanarak birden fazla kişiler tarafından bu yazılabilir yapmak çok basittir. Zend_Config_Writer kullanımları file_put_contents o always sadece yazmak için bir dosyayı kilitler LOCK_EX bayrağı, destekledi, hangi yazıyor yapmak. Bu bayrak kullanırken, aynı anda bir dosyayı güncelleştirmek için çalışırken birden yazarlar olamaz.

Aşağıdaki gibi o kadar basit Zend_Config_Writer bu bayrağı kullanmak için:

$writer = new Zend_Config_Writer_Ini(array('config'   => $config,
                                           'filename' => 'config.ini'));
$writer->setExclusiveLock(true);
$writer->write();

Bir alternatif sözdizimi:

$writer = new Zend_Config_Writer_Ini();
$writer->write('config.ini', $config, true); // 3rd parameter is $exclusiveLock

Eğer elle düzenleme değilseniz, tefrika verileri kullanın.

Kullanarak yapılandırma Yazma serialize:

file_put_contents('myConfig.txt', serialize($Settings));

Kullanarak yapılandırma Okuma unserialize:

$Settings = unserialize(file_get_contents('myConfig.txt'));

Sen __ get () PHP sihirli fonksiyonları kullanılarak bu verilerin değerlerini değiştirme ve almak için bir sınıf yazmak ve __ set olabilir ().

Eğer bir kütüphanede damla istekli iseniz, Spyc kullanmak ve bir YAML dosyada yapılandırma olabilir.

Ayrıca PHP's support for SQLite hangi veritabanı DB sunucusu için böylece gerek sadece bir dosya anlamına gelecektir kullanabilirsiniz.

DBM dosyaları kötü bir fikir olmayabilir. PHP çeşitli DBM dosya çeşitleri için destek inşa etti:

http://www.php.net/manual/en/book.dba.php