Frage

Ich muss Samba -Aktien über PHP oder über SSH (SSH -Link von PHP) hinzufügen/entfernen.

Bisher ist die einzige Lösung, die ich gefunden habe, eine Klasse, um die Datei primitiv zu bearbeiten, an die ich in Bezug auf die Zuverlässigkeit nicht viel Vertrauen habe. (http://www.phpcasses.org/package/1546-php-parse-and-recreate-tam-ba-smb-conf-file.html)

Könnten Sie einen Weg empfehlen, dies zu tun?

War es hilfreich?

Lösung

Ich kann nichts Nützliches finden, daher würde ich einen genannten simplen Ansatz empfehlen. Anstatt einen vollwertigen INI-Parser zu finden, ist es ratsam, im angehängten Modus zu arbeiten. Ein einfacher Regex würde ausreichen, um vorhandene [Aktien-] Abschnitte zu ersetzen, ohne den Rest der SMB.Conf -Datei zu schädigen.

Und Sie können die verwenden testparm Dienstprogramm zur Korrektheit der Richtigkeit vor dem Überschreiben der realen Datei.

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);
    }
}

Aktualisiert Okay, parse_ini_file funktioniert in beiden Fällen nicht. Es stolpert über den Smb.Conf -Stil. Sie können also nur vorhandene Einträge vollständig ersetzen und nicht aktualisieren.

Andere Tipps

Zend Framework Zend_Config Das Setup ist möglicherweise nützlich, da es ini -Dateien lesen/schreiben kann.

Zend_Config_Writer

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top