Okuma ve Yazma Yapılandırma Dosyaları

3 Cevap php

Ben cihazlar için bazı yapılandırma oluşturur küçük bir script yazıyorum. Ben yapılandırma depolama kulüpler ayrı dosya var, ve tarayıcı yapılandırma içeriğini yazdırma sırasında bazı dizeleri değiştirmek istiyorum. Nasıl $ _POST ['somevariable'] bir değişkeni ile dosyanın bir çizgi dize değiştirebilirsiniz?

-- Additional info --

Ben cihazların çeşitli türleri vardır. Ben her tip cihaz için yapılandırma şablonu ile ayrı bir dosya istiyorum. Birisi bazı tip cihazın yapılandırmasını değiştirmek istiyorsanız onlar bu dosyayı değil php dosyası değişecek. Ama web sayfası yazdırmadan önce bu dosyada bazı dize değiştirmek zorunda php bu şablonu kullanmak amacıyla, örneğin:%% inbetween sys info hostname% host_name% sys info konum% konum% ip set% ip% dizeleri ( ) diğer herhangi olabilecek karakterler yayınlanmıştır şeklinde kazanılmış tüm bu params vb $ _POST ["host_name"], $ _POST ["yer"], $ _POST ["ip"] ile değiştirilmesi gerekir.

3 Cevap

It is advisable to use a structured file format of some sort for this purpose.
Consider using CSV, Ini, XML or YAML and use appropriate APIs to read and write them.

Başka bir alternatif kullanmak serialize / unserialize veya var_export / include bunu kullanmak için kullanmak, sonra da ya bir dizi yapılandırma depolamak ve olacaktır .

Çok basit bir örnek:

class MyConfig
{
    public static function read($filename)
    {
        $config = include $filename;
        return $config;
    }
    public static function write($filename, array $config)
    {
        $config = var_export($config, true);
        file_put_contents($filename, "<?php return $config ;");
    }
}

Böyle sınıfını kullanabilirsiniz:

MyConfig::write('conf1.txt', array( 'setting_1' => 'foo' ));
$config = MyConfig::read('conf1.txt');
$config['setting_1'] = 'bar';
$config['setting_2'] = 'baz';
MyConfig::write('conf1.txt', $config);

SQLite kullanın. Daha sonra belirli bir veri sorgulamak ve hala yerel bir dosya olabilir. Bilginize - PDO alıntı otomatik olarak bir değer etrafında tek tırnak ekler.

$Filename = "MyDB.db";

try {
    $SQLHandle = new PDO("sqlite:".$Filename);
}
catch(PDOException $e) {
    echo $e->getMessage()." :: ".$Filename;
}

$SQLHandle->exec("CREATE TABLE IF NOT EXISTS MyTable (ID INTEGER PRIMARY KEY, MyColumn TEXT)");

$SQLHandle->beginTransaction();

$SQLHandle->exec("INSERT INTO MyTable (MyColumn) VALUES (".$SQLHandle->quote("MyValue").")");
$SQLHandle->exec("INSERT INTO MyTable (MyColumn) VALUES (".$SQLHandle->quote("MyValue 2").")");

$SQLHandle->commit();

$Iterator = $SQLHandle->query("SELECT * FROM MyTable ORDER BY MyColumn ASC");

unset($SQLHandle);

foreach($Iterator as $Row) {
    echo $Row["MyColumn"]."\n";
}

Ben Gordon ile katılıyorum.

Onun tavsiye takip yoksa böyle bir şey yapabilirsiniz:

$file = file_get_contents('./conf.tpl');
$file = str_replace('%server%', 'localhost', $file);
file_put_contents('./conf.txt', $file);