Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Uploading files with SFTP

Tags:

php

sftp

I have successfully uploaded files over ftp, but I now need to do via SFTP. I can successfully connect to the remote server, create a file and write to it, but I am unable to upload an existing file from my local server to the remote server. Is ftp_put not firing with an sftp connection?

My code used to write a file :

//Send file via sftp to server  $strServer = "*****"; $strServerPort = "****"; $strServerUsername = "*****"; $strServerPassword = "*****"; $csv_filename = "Test_File.csv";  //connect to server $resConnection = ssh2_connect($strServer, $strServerPort);  if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){     //Initialize SFTP subsystem      echo "connected";     $resSFTP = ssh2_sftp($resConnection);          $resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, 'w');     fwrite($resFile, "Testing");     fclose($resFile);                     }else{     echo "Unable to authenticate on server"; } 

Has anyone had any success in grabbing a local file and uploading via a method such as above with sftp? An example would be greatly appreciated.

Thanks

like image 861
Marc Avatar asked Mar 05 '12 19:03

Marc


People also ask

Can I SFTP a folder?

We can also use the SFTP in order to upload local file to the remote SFTP server. The put command is used to upload local file or folder to the remote server by poviding the local file or folder name. In order to upload folders to the remote SFTP server the recursive option should be provided to the put command.


1 Answers

With the method above (involving sftp) you can use stream_copy_to_stream:

$resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, 'w'); $srcFile = fopen("/home/myusername/".$csv_filename, 'r'); $writtenBytes = stream_copy_to_stream($srcFile, $resFile); fclose($resFile); fclose($srcFile); 

You can also try using ssh2_scp_send

like image 140
dev-null-dweller Avatar answered Oct 06 '22 02:10

dev-null-dweller