Какой формат файлов лучше всего подходит для файлов конфигурации?
-
20-08-2019 - |
Вопрос
Я создаю фреймворк на PHP, и мне нужно несколько файлов конфигурации.Некоторые из этих файлов неизбежно будут иметь большое количество записей.
Какой формат лучше всего подойдет для этих конфигурационных файлов?
Вот моя количественная оценка лучшего:
- Легко анализируется PHP.Было бы неплохо, если бы мне не приходилось писать код синтаксического анализа, но это не является препятствием.
- Остается легко читаемым человеком даже при большом количестве записей.
- Это широко используемый стандарт, нет пользовательских форматов.
- Краткость приветствуется.
Я начал использовать XML, но быстро отказался от него по понятным причинам.Я думал о JSON и YAML, но хотел посмотреть, что еще есть.
Решение
Как насчет формата файла INI? Это де-факто стандарт файла конфигурации, и в PHP есть встроенный синтаксический анализатор для этого формата:
Другие советы
YAML - хороший вариант: http://www.yaml.org/
Это тоже очень просто и мощно
Проекты Ruby часто используют его для настройки.
Почему бы вам не использовать файл PHP для конфигурации?
Преимущества очевидны:
- возможные ошибки будут обнаружены автоматически
- нет необходимости использовать/создавать собственный парсер
- это широко понимают программисты PHP
- у вас может быть некоторая собственная логика, например, использование пользовательских конфигураций для разработки, других для производства и т. д.
Другие платформы, такие как Django и Rails, используют файл конфигурации, который является сценарием.
Другой вариант - использовать JSON и использовать json_encode
и json_decode
.
Вы сможете использовать более богатые структуры данных в параметрах конфигурации.
Лично мне нравится делать данные конфигурации в классе.
class appNameConfig {
var $dbHost = 'localhost';
var $dbUser = 'root';
//...
}
затем, чтобы использовать их, все, что вам нужно сделать, это
$config = new appNameConfig;
mysql_connect($config->dbHost, $config->dbUser, $config->dbPassword) or die(/*...*/);
чтобы изменить конфигурацию, все, что вам нужно сделать, это прочитать файл с классом в нем. Я использую функцию, подобную этой:
function updateConfig($parameter, $value) {
$fh = fopen('config.php', 'w+');
while(!feof($fh)) {
$file .= fgets($fh);
}
$fileLines = explode("\n", $file);
for($i=0;$i<count($fileLines);$i++) {
if(strstr($fileLines[$i], $parameter)) {
$fileLines[$i] = "$" . $parameter . " = '" . $value . "'";
}
}
$file = implode("\n", $fileLines);
fwrite($fh, $file);
fclose($fh);
}