简体   繁体   中英

Download all files from SFTP folder to local folder using PHP

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.

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

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!

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM