Что такое лучший формат файлов для файлов конфигурации

Я создаю структуру в PHP и должен иметь несколько файлов конфигурации. Некоторые из этих файлов неизбежно будут иметь большое количество записей.

Какой формат был бы лучшим для этих файлов конфигурации?

Вот моя количественная оценка:

  1. Легко анализируется PHP. Было бы неплохо, если бы мне не пришлось писать код разбора, но это не прерывание сделки.
  2. Остается легко читаемым людьми, даже когда есть большое количество записей
  3. Является широко используемым стандартом, без пользовательских форматов
  4. Чизкеничность ценится

Я начал использовать XML, но быстро отказался по очевидным причинам. Я думал о JSON и YAML, но хотел посмотреть, что еще там.

Как насчет формата файла INI? Это фактический стандарт файла конфигурации, а PHP имеет встроенный парсер для этого формата:

parse_ini_file

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