Чтение и запись конфигурационных файлов

Я пишу маленький сценарий, который генерирует некоторую конфигурацию для устройств. Я хочу иметь отдельный файл, где я храню конфигурацию и меняю некоторые струны во время печати содержания конфигурации к браузеру. Как может я строка замены в строке файла с переменной от $ _POST ['somevariable']?

- Дополнительная информация-

У меня есть несколько типов устройств. Я хочу иметь отдельный файл с шаблоном конфигурации для каждого типа устройства. Если кто-то захочет изменить конфигурацию некоторого устройства типа, то они изменят тот файл не php файл. Но для использования этого шаблона в php, я должен заменить некоторую строку в том файле перед распечатыванием к веб-странице, например: имя хоста информации о sys %host_name % sys информационное местоположение %location IP % установило %ip % строковый промежуток %% (мог быть любой другой), символы должны быть заменены $ _POST ["host_name"], $ _POST ["местоположение"], $ _POST ["IP"] и т.д. Все эти параметрические усилители получены от отправленной формы.

8
задан Gordon 22 October 2010 в 00:52
поделиться

3 ответа

Для этой цели рекомендуется использовать какой-либо структурированный формат файла.
Рассмотрите возможность использования CSV, Ini, XML, JSON или YAML и используйте соответствующие API для их чтения и записи.

Другой альтернативой может быть хранение конфигурации в массиве, а затем либо использование serialize/unserialize, либо использование var_export/include для ее использования.

Очень простой пример:

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 ;");
    }
}

Вы можете использовать класс следующим образом:

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);
28
ответ дан 3 November 2019 в 12:49
поделиться

Я согласен с Гордоном.

Если вы не последуете его совету, вы можете сделать что-то вроде этого:

$file = file_get_contents('./conf.tpl');
$file = str_replace('%server%', 'localhost', $file);
file_put_contents('./conf.txt', $file);
3
ответ дан 3 November 2019 в 12:49
поделиться

Используйте SQLite. Вы можете запрашивать конкретные данные и при этом иметь локальный файл. К вашему сведению - кавычки PDO автоматически добавляют одинарные кавычки вокруг значения.

$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";
}
5
ответ дан 3 November 2019 в 12:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: