如何使用phpseclib复制或移动远程文件?

时间:2016-04-05 14:50:00

标签: php sftp phpseclib

我刚刚为自己发现了phpseclib,并希望将它用于我的代码。不知何故,我无法找到如何将文件从一个sftp目录复制到另一个sftp目录。如果你能帮我解决这个问题会很棒。

e.g:

复制

的所有文件

/ JN / XML /

/ JN / XML /备份/

4 个答案:

答案 0 :(得分:1)

$dir = "/jn/xml/";
$files = $sftp->nlist($dir, true);
foreach($files as $file)
{   
    if ($file == '.' || $file == '..') continue;
    $sftp->put($dir."backup".'/'.$file, $sftp->get($dir.'/'.$file); 
}

此代码将内容从“/ jn / xml /”目录复制到“/ jn / xml / backup”。

答案 1 :(得分:1)

要能够使用PHPSeclib正确移动文件,可以使用

data_list

答案 2 :(得分:0)

试试这个:

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('website.com');
if (!$sftp->login('user', 'pass')) {
    exit('bad login');
}

$sftp->chdir('/jn/xml/');
$files = $sftp->nlist('.', true);
foreach ($files as $file) {
    if ($file == '.' || $file == '..') {
        continue;
    }
    $dir = '/jn/xml/backup/' . dirname($file);
    if (!file_exists($dir)) {
        mkdir($dir, 0777, true);
    }
    file_put_contents($dir . '/' . $file, $sftp->get($file));
}

答案 3 :(得分:0)

我认为这应该做的事情。

我使用composer导入phpseclib所以这不是我测试的代码,但从其他答案来看,语法应该是正确的。

<?php
include('Net/SFTP.php');
// connection
$sftp = new Net_SFTP('website.com');
if (!$sftp->login('user', 'pass')) {
    exit('bad login');
}
// Use sftp to make an mv
$sftp->exec('mv /jn/xml/* /jn/xml/backup/');

注意:

  • 如果任何目录不存在,则会失败。执行echo $sftp->exec(...以获取errormsg。
  • 你会得到一个警告,因为/ jn / xml / backup /在/ jn / xml /里面,我建议把文件移到/jn/xml.bak /
  • 您可以使用&#39; Net / SSH2&#39; class,因为你只做一个mv,并且不传输任何文件。实际上,exec是来自SSH2类的函数,SFTP从SSH2继承它。