简体   繁体   English

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

[英]Download all files from SFTP folder to local folder using PHP

I try to move all files from SFTP folder to a local folder. 我尝试将所有文​​件从SFTP文件夹移动到本地文件夹。

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. 您可以使用exec函数从Php运行rsync。 It will ask you for user name and password of the remote server. 它将要求您提供远程服务器的用户名和密码。 You can bypass that using the SSHPass command line tool. 您可以使用SSHPass命令行工具绕过它。 It allows non interactive login. 它允许非交互式登录。 The following command runs rsync with sshpass: 以下命令通过sshpass运行rsync:

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 可以使用exec函数从PHP运行命令

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" ): 如果要将所有文件从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);
    }
}

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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