Загрузка папки с phpseclib Net SFTP.get не работает
Я пытаюсь получить доступ к файлу на сервере папок SFTP с помощью phpseclib. Но когда я пытаюсь использовать $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 файл там, но также интересно, как я могу получить несколько файлов, если он находится в папка.
Вот изображение структуры сервера:
2 answers
Обычно, когда я использую 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.
Метод Net_SFTP.get
может загружать только один файл. Вы не можете использовать его для загрузки целого каталога.
Если вы хотите загрузить весь каталог, вам нужно использовать один из методов "списка" (Net_SFTP.nlist
или Net_SFTP.rawlist
), чтобы получить список файлов, а затем загрузить файлы по одному.