Install SSh2 extension for PHP, then you can use class below:
<?php /** * Class to deal with sFTP connections * to use install http://php.oregonstate.edu/manual/en/ssh2.installation.php * */ class SFTPConnection { private $connection; private $sftp; public function __construct($host, $port=22) { if (!extension_loaded('ssh2')) { throw new Exception("Extension ssh2 has to be loaded to use this class. Please enable in php.ini."); } $this->connection = ssh2_connect($host, $port); if (! $this->connection) throw new Exception("Could not connect to $host on port $port."); } public function login($username, $password) { if (!extension_loaded('ssh2')) { throw new Exception("Extension ssh2 has to be loaded to use this class. Please enable in php.ini."); } if (! @ssh2_auth_password($this->connection, $username, $password)) throw new Exception("Could not authenticate with username $username " . "and password $password."); $this->sftp = @ssh2_sftp($this->connection); if (! $this->sftp) throw new Exception("Could not initialize SFTP subsystem."); } public function uploadFile($local_file, $remote_file) { if (!extension_loaded('ssh2')) { throw new Exception("Extension ssh2 has to be loaded to use this class. Please enable in php.ini."); } $sftp = $this->sftp; $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w'); if (! $stream) throw new Exception("Could not open file: $remote_file"); $data_to_send = @file_get_contents($local_file); if ($data_to_send === false) throw new Exception("Could not open local file: $local_file."); if (@fwrite($stream, $data_to_send) === false) throw new Exception("Could not send data from file: $local_file."); @fclose($stream); } function scanFilesystem($remote_file) { if (!extension_loaded('ssh2')) { throw new Exception("Extension ssh2 has to be loaded to use this class. Please enable in php.ini."); } $sftp = $this->sftp; $dir = "ssh2.sftp://$sftp$remote_file"; $tempArray = array(); $handle = opendir($dir); // List all the files while (false !== ($file = readdir($handle))) { if (substr("$file", 0, 1) != "."){ if(is_dir($file)){ // $tempArray[$file] = $this->scanFilesystem("$dir/$file"); } else { $tempArray[]=$file; } } } closedir($handle); return $tempArray; } public function receiveFile($remote_file, $local_file) { if (!extension_loaded('ssh2')) { throw new Exception("Extension ssh2 has to be loaded to use this class. Please enable in php.ini."); } $sftp = $this->sftp; $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'r'); if (! $stream) throw new Exception("Could not open file: $remote_file"); $contents = fread($stream, filesize("ssh2.sftp://$sftp$remote_file")); file_put_contents ($local_file, $contents); @fclose($stream); } public function deleteFile($remote_file){ if (!extension_loaded('ssh2')) { throw new Exception("Extension ssh2 has to be loaded to use this class. Please enable in php.ini."); } $sftp = $this->sftp; unlink("ssh2.sftp://$sftp$remote_file"); } } ?> |

#1 by occurallow on June 10, 2009 - 21:46
Quote
the ssh2 extension cannot be installed on most shared hosts – either they install it for you or you’re out of luck. i recommend this as an alternative:
http://phpseclib.sourceforge.net/
includes a pure-php implementation of sftp.