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

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

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

Вот мое количественное определение наилучшего:

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

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

Ответы

Ответ 1

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

parse_ini_file

Ответ 2

YAML - хороший вариант: http://www.yaml.org/

Это очень просто и мощно, тоже

Проекты Ruby используют его для конфигурации.

Ответ 3

Почему вы не используете файл PHP для конфигурации?

Преимущества очевидны:

  • Возможные ошибки будут автоматически обнаружены
  • Не нужно использовать/создавать собственный парсер
  • его широко понимают программисты PHP
  • у вас может быть какая-то пользовательская логика, например, использование пользовательских конфигураций для разработки, другие для производства и т.д.

Другие фреймворки, такие как Django и rails, используют конфигурационный файл, который является script.

Ответ 4

Другой вариант - использовать JSON и использовать json_encode и json_decode.

В конфигурационных параметрах вы сможете использовать более богатые структуры данных.

Ответ 5

Лично мне нравится делать конфигурационные данные в классе.

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