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