Modifier smb.conf de PHP?
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?
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.