У меня есть существующий файл ini, который я создал, и я хотел бы знать, есть ли способ обновить раздел файла или мне придется переписывать весь файл каждый раз?
Вот пример моего файла config.ini:
[config] title='test' status=0 [positions] top=true sidebar=true content=true footer=false
Скажем, я хочу изменить [positions] top=false
. Поэтому я бы использовал parse_ini_file, чтобы получить всю информацию, а затем внести свои изменения и использовать fwrite для перезаписи всего файла. Или есть способ изменить этот раздел?
Я использовал первое предложение о вас:
Поэтому я бы использовал файл 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); }
Если вы используете функции PHP INI, вы должны каждый раз переписывать файл.
Если вы напишете свой собственный процессор, вы можете (с ограничениями) обновить его. Если ваши вставки длиннее или короче, чем ваши удаления, вам все равно придется переписать файл.
Это прекрасный пример того, когда вы можете использовать регулярные выражения для замены строки текста. Проверьте функцию 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 – ваше регулярное выражение, и $ replacement – ваше замещающее значение.