openrat-cms

OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs | README

SFtp.class.php (2577B)


      1 <?php
      2 // OpenRat Content Management System
      3 // Copyright (C) 2002-2012 Jan Dankert, cms@jandankert.de
      4 //
      5 // This program is free software; you can redistribute it and/or
      6 // modify it under the terms of the GNU General Public License
      7 // as published by the Free Software Foundation; either version 2
      8 // of the License, or (at your option) any later version.
      9 //
     10 // This program is distributed in the hope that it will be useful,
     11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 // GNU General Public License for more details.
     14 //
     15 // You should have received a copy of the GNU General Public License
     16 // along with this program; if not, write to the Free Software
     17 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
     18 namespace cms\generator\target;
     19 
     20 use logger\Logger;
     21 use util\exception\PublisherException;
     22 use util\exception\UIException;
     23 
     24 
     25 /**
     26  * Darstellen einer FTP-Verbindung, das beinhaltet
     27  * das Login, das Kopieren von Dateien sowie praktische
     28  * FTP-Funktionen
     29  *
     30  * @author $Author$
     31  * @version $Revision$
     32  * @package openrat.services
     33  */
     34 class SFtp extends Scp
     35 {
     36 	/**
     37 	 * @var resource
     38 	 */
     39 	protected $sftpConnection;
     40 
     41 
     42 	// Aufbauen der Verbindung
     43 	public function open()
     44 	{
     45 		$this->createConnection();
     46 
     47 		$this->sftpConnection = @ssh2_sftp($this->sshConnection);
     48 
     49 		if (! $this->sftpConnection)
     50 			throw new PublisherException("Could not initialize SFTP subsystem.");
     51 
     52 	}
     53 
     54 
     55 	/**
     56 	 * Kopieren einer Datei vom lokalen System auf den SFTP-Server.
     57 	 *
     58 	 * @param String Quelle
     59 	 * @param String Ziel
     60 	 * @param int time)
     61 	 */
     62 	public function put($source, $dest, $lastChangeDate)
     63 	{
     64 		$dest = $this->url->path . '/' . $dest;
     65 
     66 		$sftp = $this->sftpConnection;
     67 
     68 		ssh2_sftp_mkdir ( $sftp, dirname($dest),0755, true);
     69 
     70 		$stream = @fopen("ssh2.sftp://$sftp$dest", 'w');
     71 
     72 		if (! $stream)
     73 			throw new PublisherException("Could not create SFTP-Stream on file: $dest");
     74 
     75 		$data_to_send = @file_get_contents($source);
     76 
     77 		if ($data_to_send === false)
     78 			throw new PublisherException("Could not open local file: $source");
     79 
     80 		if (@fwrite($stream, $data_to_send) === false)
     81 			throw new PublisherException("Could not send data from file: $source.");
     82 
     83 		@fclose($stream);
     84 	}
     85 
     86 
     87 	/**
     88 	 * Schliessen der FTP-Verbindung.<br>
     89 	 * Sollte unbedingt aufgerufen werden, damit keine unn�tigen Sockets aufbleiben.
     90 	 */
     91 	public function close()
     92 	{
     93 		parent::close();
     94 	}
     95 
     96 
     97 	public static function isAvailable()
     98 	{
     99 		return parent::isAvailable() && function_exists('ssh2_sftp');
    100 	}
    101 }
    102