您的位置:首页 > 编程语言 > PHP开发

Ubuntu下 使用sftp将文件同步到不同服务器

2012-08-23 15:29 330 查看
先说一下,应用的背景吧。

今天公司让我写段程序,让我将主服务器的配置文件同步到不同的服务器上去。研究了一会,

写出的代码如下:

配置文件config.inc.php部分内容:

'ServerGroup' => array(
'192.168.0.240' => array(
'user' => 'root',
'pass' => 'sjgj2508',
'path' => '/var/www/html/',
),
'192.168.0.244' => array(
'user' => 'root',
'pass' => 'sjgj2508',
'path' => '/var/www/html/',
),
),

同步程序的主要代码如下:

$configName = 'config.xml';                     //主服务器的配置文件名称
$confPath   = ROOT_PATH.'/_cfg/config.xml';     //主服务器的配置文件路径
//从服务器的主机名等信息
$serverGroup = $this->conf['ServerGroup'];	  //这里的$this->conf[];为框架内置数组,可以获取到上面配置文件中的内容
foreach($serverGroup as $k => $v){
//连接从服务器
$resConnection = ssh2_connect($k);
//判断是否登陆从服务器成功
if(ssh2_auth_password($resConnection, $v['user'], $v['pass'])){
//初始化SFTP子系统
$resSFTP = ssh2_sftp($resConnection);
if(!copy($confPath, "ssh2.sftp://{$resSFTP}{$v['path']}_inc/class/Algorithm/{$configName}")) {
echo '同步配置文件失败';
}
} else {
echo "无法连接从服务器{$k}";
}
}


测试之前要确保系统有装相关扩展(如:libssh2)。

第一次写blog 。写下来这些东西算是做个备份吧,请大神们多多指教。

另外 程序中有一处不是很理解。

if(!copy($confPath, "ssh2.sftp://{$resSFTP}{$v['path']}_inc/class/Algorithm/{$configName}")) {

echo '同步配置文件失败';

}
这一段中 ssh2.sftp://{$resSFTP}{$v['path']}_inc/class/Algorithm/{$configName}"

重点是不太清楚为什么前面为什么要加 ssh2.sftp://{$resSFTP} 这么写的原理是什么? 希望看到这篇文章的大神能给解惑。谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: