Last active
November 16, 2022 09:38
-
-
Save danielbwa/6993444 to your computer and use it in GitHub Desktop.
List and download all files in a directory through sftp with php / ssh2. In my example i use scandir to list the files and ssh2_scp_recv to grab a file. I've found a lot of examples using fopen to grab the remote file, that didn't work for me and i found the code below cleaner than the fopen option. For an example on how to do the same as my exa…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$username = "your_username"; | |
$password = "your_pass"; | |
$url = 'your_stp_server_url'; | |
// Make our connection | |
$connection = ssh2_connect($url); | |
// Authenticate | |
if (!ssh2_auth_password($connection, $username, $password)) throw new Exception('Unable to connect.'); | |
// Create our SFTP resource | |
if (!$sftp = ssh2_sftp($connection)) throw new Exception('Unable to create SFTP connection.'); | |
$localDir = '/path/to/your/local/dir'; | |
$remoteDir = '/path/to/your/remote/dir'; | |
// download all the files | |
$files = scandir('ssh2.sftp://' . $sftp . $remoteDir); | |
if (!empty($files)) { | |
foreach ($files as $file) { | |
if ($file != '.' && $file != '..') { | |
ssh2_scp_recv($connection, "$remoteDir/$file", "$localDir/$file"); | |
} | |
} | |
} | |
?> |
Can this be modified to download a X number of files instead of all the files???
@belgareth That should be easy to do, not sure why you want to do that but keep a count in the foreach and break out of the foreach with break; when your desired number of download has been reached. http://php.net/manual/en/control-structures.break.php
Just what I needed. A remote download via SSH
Suddenly, it doesn't work for files with tab in the name
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello, the scipt is not iterating over the loop, pausing at the 1st file it gets from the files lists. and the 1st file which is copied also has no content inside it.