Что такое лучший формат файлов для файлов конфигурации - PullRequest
15 голосов
/ 25 января 2009

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

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

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

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

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

Ответы [ 5 ]

20 голосов
/ 25 января 2009

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

parse_ini_file

14 голосов
/ 25 января 2009

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

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

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

12 голосов
/ 25 января 2009

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

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

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

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

4 голосов
/ 25 января 2009

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

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

1 голос
/ 25 января 2009

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

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