douchuo1963
2017-01-14 11:23
浏览 677
已采纳

使用PHP将SFTP文件夹中的所有文件下载到本地文件夹

I try to move all files from SFTP folder to a local folder.

I use the following script:

$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;
    }
}

Thanks Guys.

图片转代码服务由CSDN问答提供 功能建议

我尝试将所有文​​件从SFTP文件夹移动到本地文件夹。

我使用以下脚本:

  $ connection = ssh2_connect('xxxx',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; 
} \  n} 
   
 
 

谢谢大家。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • doubingling4706 2017-01-16 05:32
    已采纳

    You can run rsync from Php using the exec function. It will ask you for user name and password of the remote server. You can bypass that using the SSHPass command line tool. It allows non interactive login. The following command runs rsync with sshpass:

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

    The command can be run from Php using the exec function

    打赏 评论
  • douxia9826 2017-01-14 12:15

    If you want to download all files from the SFTP directory to local directory - local as of the PHP script (if that's what you call "FTP server"):

    $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);
        }
    }
    

    Add error checking!

    打赏 评论
  • douchan7552 2017-01-14 12:16

    solution for interested persons ==>

    //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);
        }
    }
    
    打赏 评论

相关推荐 更多相似问题