使用phpseclib Net_SFTP.get下载文件夹不起作用

时间:2017-11-16 14:50:53

标签: php sftp phpseclib

我正在尝试使用phpseclib访问SFTP文件夹服务器中的文件。但是当我尝试使用$sftp->get时,它会返回false。我不知道如何调试问题。

public function get_file_from_ftps_server()
{
    $sftp = new \phpseclib\Net\SFTP(getenv('INSTRUM_SERVER'));
    if (!$sftp->login(getenv('INSTRUM_USERNAME'), getenv('INSTRUM_PASSWORD'))) {
        exit('Login Failed');
    }

    $this->load->helper('file');           
    $root  = dirname(dirname(__FILE__));
    $root .= '/third_party/collections_get/';
    $path_to_server = 'testdownload/';
    $result = $sftp->get($path_to_server, $root);

    var_dump($result);
}

$result中,我得到false,我不确定为什么会发生这种情况,我会阅读他们的文档,但仍然不确定。 Root是我希望存储信息的目录。现在我只在那里添加了一个trial.xml文件,但是也想知道如果文件夹中有多个文件我该如何获取。

以下是服务器结构的图片:

structure

3 个答案:

答案 0 :(得分:3)

通常当我使用sftp时,我通常会更改目录,然后尝试下载信息。

$sftp->pwd(); // This will show you are in the root after connection.
$sftp->chdir('./testdownload'); // this will go inside the test directory.
$get_path = $sftp->pwd()
//If you want to download multiple data, use
$x = $sftp->nlist();
//Loop through `x` and then download the file using.
$result = $sftp->get($get_path); // Normally I use the string information that is returned and then download using

file_put_contents($root, $result);

// Root is your directory, and result is the string.

答案 1 :(得分:1)

Net_SFTP.get方法只能下载单个文件。您无法使用它来下载整个目录。

如果要下载整个目录,则必须使用" list"方法(Net_SFTP.nlistNet_SFTP.rawlist)来检索文件列表,然后逐个下载文件。

答案 2 :(得分:0)

<?php
use phpseclib\Net\SFTP;

$sftp = new SFTP("server");

if(!$sftp->login("username", "password")) {
    throw new Exception("Connection failed");
}

// The directory you want to download the contents of
$sftp->chdir("/remote/system/path/");

// Loop through each file and download
foreach($sftp->nlist() as $file) {
    if($file != "." && $file != "..")
        $sftp->get("/remote/system/path/$file", "/local/system/path/$file");
}
?>