如何使用phpseclib将文件夹服务器复制到服务器?

时间:2019-03-12 04:13:53

标签: php backup sftp phpseclib

我想使用库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

1 个答案:

答案 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对象。但这并不是似乎,就像您要的那样。