我正在尝试使用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文件,但是也想知道如果文件夹中有多个文件我该如何获取。
以下是服务器结构的图片:
答案 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.nlist
或Net_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");
}
?>