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

StackOverflow https://stackoverflow.com/questions/476892

  •  20-08-2019
  •  | 
  •  

Вопрос

Я создаю фреймворк на 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);
 }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top