Чтение и запись файлов конфигурации
Я пишу небольшой script, который генерирует некоторую конфигурацию для устройств. Я хочу иметь отдельный файл, где храню конфигурацию, и изменять некоторые строки во время печати содержимого конфигурации в браузере. Как заменить строку в строке файла переменной $_POST ['somevariable']?
- Дополнительная информация -
У меня есть несколько типов устройств. Я хочу иметь отдельный файл с шаблоном конфигурации для каждого типа устройства. Если кто-то захочет изменить конфигурацию какого-либо устройства, он изменит этот файл, а не файл php. Но для того, чтобы использовать этот шаблон в php, я должен заменить некоторую строку в этом файле перед печатью на веб-странице, например: sys info hostname% host_name% sys info location% location% ip set% ip% строки inbetween %% ( могут быть любые другие), символы должны быть заменены на $_POST [ "host_name" ], $_POST [ "location" ], $_POST [ "ip" ] и т.д. Все эти параметры получены из опубликованной формы.
Ответы
Ответ 1
Целесообразно использовать для этой цели структурированный формат файла.
Рассмотрите возможность использования 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);
Ответ 2
Использовать SQLite. Затем вы можете запросить конкретные данные и иметь локальный файл. Котировка FYI - 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";
}
Ответ 3
Я согласен с Гордоном.
Если вы не следуете его совету, вы можете сделать что-то вроде этого:
$file = file_get_contents('./conf.tpl');
$file = str_replace('%server%', 'localhost', $file);
file_put_contents('./conf.txt', $file);