Не могу найти что-то полезное, поэтому я бы порекомендовал также упрощенный подход.Вместо того, чтобы находить полноценный анализатор INI, желательно работать в основном в режиме добавления.Простого регулярного выражения было бы достаточно, чтобы заменить существующие разделы [share] без ущерба для остальной части файла smb.conf.
И вы можете использовать утилиту testparm
для проверки правильности перед перезаписью реального файла.1004 *
define("SMB_CONF", "/etc/samba/smb.conf");
function add_share($section, $options) {
// read old data
#$old = parse_ini_file(SMB_CONF);
$conf = file_get_contents(SMB_CONF);
// merge new settings
#if (isset($old[$section])) {
# $options = array_merge($old[$section], $options);
#}
// remove old share section, if it exists
preg_replace("/^\[$section\]\s*\n(^(?!\[).*\n)+/m", "", $conf);
// write out new ini file
$conf .= "\n\n[$section]\n";
foreach ($options as $key=>$value) {
$conf .= "$key = $value\n";
}
$tmp = tempnam("/tmp/", "SMB");
file_put_contents($tmp, $conf);
// copy if it is syntactically correct
if (strstr(`testparm -s $tmp 2>&1`, "OK")) {
rename($tmp, SMB_CONF);
}
}
Обновлено Хорошо, parse_ini_file
не работает ни в одном случае.Это опрокидывает стиль smb.conf.Таким образом, вы можете только полностью заменить существующие записи, но не обновлять их.