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