我需要通过PHP或SSH(来自PHP的ssh链接)添加/删除SAMBA共享。
到目前为止,我发现的唯一解决方案是一个原始处理文件的类,我对可靠性并不十分信任。 (http://www.phpclasses.org/package/1546-PHP-Parse-and-recreate-the-Samba-smb-conf-file.html)
你能推荐一种方法吗?
答案 0 :(得分:1)
找不到有用的东西,所以我会推荐一种同样简单的方法。而不是找到一个成熟的INI解析器,建议以append-mostly模式工作。一个简单的正则表达式足以替换现有的[share]部分而不会损害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风格。因此,您只能完全替换现有条目,而不是更新它们。
答案 1 :(得分:0)
Zend Framework的Zend_Config
设置可能很有用,因为它能够读/写ini文件。