2016-05-10 11 views
0

Нижеприведенный скрипт работает успешно.Попытка получить все содержимое каталога с одного сервера на другой с помощью 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"; 
    } 
+0

'ssh2_scp_recv' не поддерживает несколько копий файлов. Возможно, вам удастся использовать 'ssh2_exec' и/или' ssh2_tunnel', но это просто недоказанная идея. Какая у вас среда? У вас нет доступа к системе через 'exec'? Как правило, почему вы используете PHP? –

+0

Все серверы основаны на Ubuntu, Linux. Да, у меня есть полная система доступа через exec. Причина, по которой я использую PHP, есть пост-обрабатывающий скрипт перед извлечением содержимого – sanainfotech

+0

Так почему бы вам не вызвать 'scp' через exec? При использовании пары ключей взаимодействие не требуется. –

ответ

0
<?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