Как обновить ini-файл с помощью php? - PullRequest
5 голосов
/ 13 августа 2010

У меня есть существующий INI-файл, который я создал, и я хотел бы знать, есть ли способ обновить раздел файла или мне нужно каждый раз переписывать весь файл?

Вот пример моего файла config.ini:

[config]
    title='test'
    status=0
[positions]
    top=true
    sidebar=true
    content=true
    footer=false

Скажите, что я хочу изменить [positions] top=false. Поэтому я бы использовал parse_ini_file, чтобы получить всю информацию, затем внести свои изменения и использовать fwrite, чтобы переписать весь файл. Или есть способ просто изменить этот раздел?

Ответы [ 3 ]

5 голосов
/ 03 мая 2016

Я использовал первое предложение от вас:

Поэтому я бы использовал parse_ini_file, чтобы получить всю информацию, затем внесу свои изменения и использую fwrite, чтобы переписать весь файл

function config_set($config_file, $section, $key, $value) {
    $config_data = parse_ini_file($config_file, true);
    $config_data[$section][$key] = $value;
    $new_content = '';
    foreach ($config_data as $section => $section_content) {
        $section_content = array_map(function($value, $key) {
            return "$key=$value";
        }, array_values($section_content), array_keys($section_content));
        $section_content = implode("\n", $section_content);
        $new_content .= "[$section]\n$section_content\n";
    }
    file_put_contents($config_file, $new_content);
}
1 голос
/ 13 августа 2010

Это прекрасный пример того, когда вы можете использовать регулярные выражения для замены строки текста. Проверьте функцию preg_replace . Если вы не совсем уверены, как использовать регулярные выражения, вы можете найти отличный учебник здесь

Просто чтобы уточнить, вам нужно сделать что-то вроде этого:

<?php

$contents = file_get_contents("your file name");
preg_replace($pattern, $replacement, $contents);

$fh = fopen("your file name", "w");
fwrite($fh, $contents);

?>

Где $ pattern - это ваше регулярное выражение для сопоставления, а $ replace - значение для замены.

1 голос
/ 13 августа 2010

Если вы используете функции PHP INI, вы должны каждый раз переписывать файл.

Если вы пишете свой собственный процессор, вы можете (с ограничениями) обновить его на месте.Если ваши вставки длиннее или короче, чем ваши, вам все равно придется переписать файл.

...