我想使用库phpseclib在服务器之间创建备份数据。这是最近的脚本:
<?php
include "lib/Crypt/RSA.php";
include "lib/Crypt/Base.php";
include "lib/Crypt/RC4.php";
include "lib/Crypt/AES.php";
include "lib/Net/SFTP.php";
include "lib/Math/BigInteger.php";
set_include_path('lib/');
$sftp = new Net_SFTP('172.1.xxx.xx');
if (!$sftp->login('root', 'xxxx')) {
exit('login failed');
}
$sftp->chdir('/opt/oss/server/var/fileint/fm');
$files = $sftp->nlist('.', true);
foreach ($files as $file) {
if ($file == '.' || $file == '..') {
continue;
}
$dir = './Alarm/' . dirname($file);
if (!file_exists($dir)) {
//mkdir($dir, 0777, true);
}
file_put_contents($dir . '/' . $file, $sftp->get($file));
}
但仍然错误-> PHP警告:file_put_contents()
复制所有文件和文件夹
服务器1
到
服务器2
答案 0 :(得分:0)
构建脚本:
<?php
set_include_path('lib/');
include "lib/Net/SFTP.php";
$sftp = new Net_SFTP('172.1.xxx.xx'); // source server
if (!$sftp->login('root', 'xxxx')) {
exit('login failed');
}
$sftp2 = new Net_SFTP('172.1.xxx.xx'); // destination server
if (!$sftp2->login('root', 'xxxx')) {
exit('login failed');
}
$sftp->chdir('/opt/oss/server/var/fileint/fm');
$files = $sftp->nlist('.', true);
foreach ($files as $file) {
if ($file == '.' || $file == '..') {
continue;
}
$dir = './Alarm/' . dirname($file);
if (!$sftp2->file_exists($dir)) {
$sftp2->mkdir($dir, 0777, true);
}
$sftp2->put($dir . '/' . basename($file), $sftp->get($file));
}
这会将目录从一台远程服务器复制到另一台远程服务器。请注意,如果您要将目录从远程服务器复制到同一服务器上的另一个目录,那么我将重用$sftp
对象,而不是创建新的$sftp2
对象。但这并不是似乎,就像您要的那样。