Попытка получить все содержимое каталога с одного сервера на другой, используя ssh2_scp_recv в php

Приведенный ниже скрипт успешно работает.

Получение файла с одного сервера на другой

if(ssh2_scp_recv($conn, '/var/www/html/captures/store/2016/04/HK/15721022890870/test/vcredist.bmp', 
    '/var/www/html/captures/store/2016/04/HK/15721022890870/test/vcredist.bmp')){
echo "\n recevied \n";
  }else{
 echo "\n not recevied\n";
  }

Но вместо того, чтобы получить только статический файл, я хочу получить папку со всем ее содержимым внутри.

В приведенном выше примере каталог, который я хотел бы получить на локальный сервер, — «15721022890870».

/var/www/html/captures/store/2016/04/HK/15721022890870/

Я пробовал код ниже, но не работает,

На удаленном сервере есть каталог, но на локальном сервере его нет, поэтому я хочу создать каталог, а затем скопировать все его содержимое внутрь

if(ssh2_scp_recv($conn, '/var/www/html/captures/store/2016/04/HK/15721022890870/', 
    '/var/www/html/captures/store/2016/04/HK/')){
echo "\n recevied done \n";
  }else{
  echo "\n not done \n";
   }

person sanainfotech    schedule 10.05.2016    source источник
comment
ssh2_scp_recv не поддерживает несколько копий файлов. Вы можете добиться успеха с ssh2_exec и/или ssh2_tunnel, но это всего лишь недоказанная идея. Каково ваше окружение? У вас нет доступа к системе через exec? Вообще, почему вы используете PHP?   -  person Quasimodo's clone    schedule 10.05.2016
comment
Все серверы основаны на Ubuntu, Linux. Да, у меня полный доступ к системе через exec. Причина, по которой я использую PHP, заключается в том, что скрипт постобработки перед получением контента   -  person sanainfotech    schedule 10.05.2016
comment
Так почему бы вам не вызвать scp через exec? При использовании пары ключей взаимодействие не требуется.   -  person Quasimodo's clone    schedule 10.05.2016


Ответы (1)


<?php
$username = "your_username";
$password = "your_pass";
$url      = 'your_stp_server_url';
// Make our connection
$connection = ssh2_connect($url);

// Authenticate
if (!ssh2_auth_password($connection, $username, $password)) throw new Exception('Unable to connect.');

// Create our SFTP resource
if (!$sftp = ssh2_sftp($connection)) throw new Exception('Unable to create SFTP connection.');
$localDir  = '/path/to/your/local/dir';
$remoteDir = '/path/to/your/remote/dir';
// download all the files
$files    = scandir('ssh2.sftp://' . $sftp . $remoteDir);
if (!empty($files)) {
  foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
      ssh2_scp_recv($connection, "$remoteDir/$file", "$localDir/$file");
    }
  }
}
?>

Это с сервера на компьютер, но вы можете изменить $localDir

person Belgarath    schedule 05.06.2017