2010-08-12 3 views
3

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

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

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

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

ответ

1

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

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

1

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

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

<?php 

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

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

?> 

Где $ шаблона является ваше регулярным выражением для match и $ replacement - ваше замещающее значение.

3

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

Так что я использую 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); 
} 
+0

Работает для меня очарованием .. Приветствия! – irishwill200

Смежные вопросы