PHP または SSH (PHP からの ssh リンク) を介して SAMBA 共有を追加/削除する必要があります。
これまでのところ、私が見つけた唯一の解決策は、ファイルをプリミティブに処理するためのクラスですが、信頼性の面であまり信頼していません。(http://www.phpclasses.org/package/1546-PHP-Parse-and-recreate-the-Samba-smb-conf-file.html)
それを行う方法をお勧めできますか?
便利なものが見つからないので、同様に単純化したアプローチをお勧めします。本格的な INI パーサーを見つける代わりに、append-mostly モードで作業することをお勧めします。smb.conf ファイルの残りの部分を損なうことなく既存の [share] セクションを置き換えるには、単純な正規表現で十分です。
また、testparm
ユーティリティを使用して、実際のファイルを上書きする前に正確性を調べることができます。
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 スタイルにつまずきます。したがって、既存のエントリを完全に置き換えることはできますが、更新することはできません。
Zend Framework のZend_Config
設定は、ini ファイルの読み書きができるので便利かもしれません。