質問

PHPまたはSSH(PHPからのSSHリンク)を介してSambaシェアを追加/削除する必要があります。

これまでのところ、私が見つけた唯一の解決策は、ファイルをプライミット的に処理するためのクラスです。 (http://www.phpclasses.org/package/1546-php-parse-and-recreate-the-samba-smb-conf-file.html)

それを行う方法をお勧めしますか?

役に立ちましたか?

解決

何か便利なものが見つからないので、同様に単純なアプローチをお勧めします。本格的なINIパーサーを見つける代わりに、付録モードで動作することをお勧めします。 SMB.CONFファイルの残りの部分を傷つけることなく、既存の[共有]セクションを置き換えるには、単純な正規表現で十分です。

そして、あなたはを使用することができます 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ファイルの読み取り/書き込みができるため、セットアップが役立つ場合があります。

zend_config_writer

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top