Я создаю структуру в PHP и должен иметь несколько файлов конфигурации. Некоторые из этих файлов неизбежно будут иметь большое количество записей.
Какой формат был бы лучшим для этих файлов конфигурации?
Вот моя количественная оценка:
Я начал использовать XML, но быстро отказался по очевидным причинам. Я думал о JSON и YAML, но хотел посмотреть, что еще там.
Как насчет формата файла INI? Это фактический стандарт файла конфигурации, а PHP имеет встроенный парсер для этого формата:
parse_ini_file
YAML – хороший вариант: http://www.yaml.org/
Это очень просто и мощно, тоже
Ruby-проекты используют его для конфигурации.
Почему вы не используете файл 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); }