2017-01-14 34 views
1

すべてのファイルをSFTPフォルダからローカルフォルダに移動しようとしています。PHPを使用してSFTPフォルダからローカルフォルダにすべてのファイルをダウンロード

$connection = ssh2_connect('x.x.x.x', 22); 

if (!ssh2_auth_password($connection, 'User_login', 'User_Pass')) { 
    throw new Exception('Impossible de ce connencter.'); 
} 

if (!$sftp = ssh2_sftp($connection)) { 
    throw new Exception('Impossible de ce connencter.'); 
} 

$files = array(); 
$dirHandle = opendir("ssh2.sftp://$sftp/01_Folder/"); 

while (false !== ($file = readdir($dirHandle))) { 
    if ($file != '.' && $file != '..') { 
     $files[] = $file; 
    } 
} 

おかげでみんな:

は、私は次のスクリプトを使用します。

+1

exec関数を使用して、PHPから実行することができます。 – e4c5

+0

お返事いただきありがとうございます.FTPサーバーはローカルストリームで、ファイルを取得するためにリモートのSFTPサーバーにスクリプトを起動します。 – Belicoff

+0

あなたの質問の*「別のリモートftpサーバー」*は*あなたのコメントの*「FTPサーバーはローカルストリームです」*とどうなりますか? –

答えて

2

あなたはexec機能を使用して、PHPからのrsyncを実行することができます。リモートサーバーのユーザー名とパスワードを尋ねられます。 SSHPassコマンドラインツールを使用してバイパスすることができます。それは非対話的なログインを可能にする。次のコマンドは、sshpassでrsyncを実行します:

rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/ 

コマンドを使用すると、彼らは二つの異なるものですFTPサーバー上のファイルを置くためにSFTPを使用することはできません

+0

Mr Nadirに感謝します。これは私がこの方法(y)を好む方法です。 – Belicoff

+0

SFTPとは何の関係もありません。 –

1

あなたがローカルディレクトリにSFTPディレクトリからすべてのファイルをダウンロードする場合 - ローカル PHPスクリプトのように(それはあなたが「FTPサーバ」呼んだ場合):

$connection = ssh2_connect('sftp.example.com'); 

ssh2_auth_password($connection, 'username', 'password'); 

$sftp = ssh2_sftp($connection); 

$dirhandle = opendir("ssh2.sftp://$sftp/remote/folder/"); 

while (false !== ($file = readdir($dirhandle))) 
{ 
    if (($file != '.') && ($file != '..')) 
    { 
     $remotehandle = fopen("ssh2.sftp://$sftp/remote/folder/$file", 'r'); 
     $localhandle = fopen("/local/folder/$file", 'w'); 
     stream_copy_to_stream($remotehandle, $localhandle); 
     fclose($remotehandle); 
     fclose($localhandle); 
    } 
} 

追加エラーチェック!

1

利害関係者のためのソリューション==>

//connecxion 
$connection = ssh2_connect('remote.server.com', 22); 
// Authentication 
if (!ssh2_auth_password($connection, 'Login_user', 'Password')) { 
    throw new Exception('Impossible de ce connencter.'); 
} 

// Creation de la source SFTP 
if (!$sftp = ssh2_sftp($connection)) { 
    throw new Exception('Impossible de ce connencter.'); 
} 


$files = array(); 
$dirHandle = opendir("ssh2.sftp://$sftp/Remote_folder/"); 

while (false !== ($file = readdir($dirHandle))) { 
    if ($file != '.' && $file != '..') { 
     $files[] = $file; 
    } 
} 


if (count($files)) { 
    foreach ($files as $fileName) { 
     // Dossier Change 
     if (!$remoteStream = @fopen("ssh2.sftp://$sftp/Remote_folder/$fileName", 'r')) { 
      throw new Exception("Unable to open remote file: $fileName"); 
     } 

     // Dossier Local 
     if (!$localStream = @fopen("/local_folder/$fileName", 'w')) { 
      throw new Exception("Unable to open local file for writing: /var/www/change_files/$fileName"); 
     } 

     // Ecriture du dossier change dans le dossier Local 
     $read = 0; 
     $fileSize = filesize("ssh2.sftp://$sftp/Remote_folder/$fileName"); 
     while ($read < $fileSize && ($buffer = fread($remoteStream, $fileSize - $read))) { 
      $read += strlen($buffer); 

      // Ecriture du dossier 
      if (fwrite($localStream, $buffer) === FALSE) { 
       throw new Exception("Unable to write to local file: /local_folder/$fileName"); 
      } 
     } 

     // Fermeture des Connexions 
     fclose($localStream); 
     fclose($remoteStream); 
    } 
} 
関連する問題