Click Fraud Protection
PHP related blog, freelancer to hire!

sFTP for PHP 5.xx

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 Comment
  1. 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.

Leave a Reply