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.