openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

SFtpTarget.class.php (2427B)


      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  * A Secure-FTP (*not* FTPS!) target.
     27  */
     28 class SFtpTarget extends ScpTarget
     29 {
     30 	/**
     31 	 * @var resource
     32 	 */
     33 	protected $sftpConnection;
     34 
     35 
     36 	// Aufbauen der Verbindung
     37 	public function open()
     38 	{
     39 		$this->createConnection();
     40 
     41 		$this->sftpConnection = @ssh2_sftp($this->sshConnection);
     42 
     43 		if (! $this->sftpConnection)
     44 			throw new PublisherException("Could not initialize SFTP subsystem.");
     45 
     46 	}
     47 
     48 
     49 	/**
     50 	 * Kopieren einer Datei vom lokalen System auf den SFTP-Server.
     51 	 *
     52 	 * @param String Quelle
     53 	 * @param String Ziel
     54 	 * @param int time)
     55 	 */
     56 	public function put($source, $dest, $lastChangeDate)
     57 	{
     58 		$dest = $this->url->path . '/' . $dest;
     59 
     60 		$sftp = $this->sftpConnection;
     61 
     62 		ssh2_sftp_mkdir ( $sftp, dirname($dest),0755, true);
     63 
     64 		$stream = @fopen("ssh2.sftp://$sftp$dest", 'w');
     65 
     66 		if (! $stream)
     67 			throw new PublisherException("Could not create SFTP-Stream on file: $dest");
     68 
     69 		$data_to_send = @file_get_contents($source);
     70 
     71 		if ($data_to_send === false)
     72 			throw new PublisherException("Could not open local file: $source");
     73 
     74 		if (@fwrite($stream, $data_to_send) === false)
     75 			throw new PublisherException("Could not send data from file: $source.");
     76 
     77 		@fclose($stream);
     78 	}
     79 
     80 
     81 	/**
     82 	 * Schliessen der FTP-Verbindung.<br>
     83 	 * Sollte unbedingt aufgerufen werden, damit keine unn�tigen Sockets aufbleiben.
     84 	 */
     85 	public function close()
     86 	{
     87 		parent::close();
     88 	}
     89 
     90 
     91 	public static function isAvailable()
     92 	{
     93 		return parent::isAvailable() && function_exists('ssh2_sftp');
     94 	}
     95 }
     96