Question

Je dois ajouter / supprimer des partages SAMBA par PHP ou via SSH (lien ssh de PHP).

Jusqu'à présent, la seule solution que j'ai trouvé est une classe pour la manipulation du fichier primitively, que je n'ai pas beaucoup confiance en en termes de fiabilité. (Http://www.phpclasses.org/package/1546-PHP-Parse-and-recreate-the-Samba-smb-conf-file.html)

Pouvez-vous recommander une façon de le faire?

Était-ce utile?

La solution

Vous ne trouvez pas quelque chose d'utile, donc je recommande une approche aussi simpliste. Au lieu de trouver un analyseur INI à part entière, il est conseillé de travailler en mode append-la plupart du temps. Une regex simple serait suffisante pour remplacer les sections existantes [action] sans nuire au reste du fichier smb.conf.

Et vous pouvez utiliser l'utilitaire testparm pour sonder correct avant d'écraser le fichier réel.

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

Mise à jour Ok, parse_ini_file ne fonctionne pas dans les deux cas. Il trébuche sur le style smb.conf. Vous ne pouvez donc remplacer complètement les entrées existantes, ne pas les mettre à jour.

Autres conseils

La configuration Zend_Config de Zend Framework peut être utile car il est capable de lire / écrire des fichiers ini.

Zend_Config_Writer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top