File Manager

Current Directory: /home/astoriaah/www/administrator/components/com_akeeba/BackupEngine/Archiver
Viewing File: /home/astoriaah/www/administrator/components/com_akeeba/BackupEngine/Archiver/Directftpcurl.php
<?php /** * Akeeba Engine * * @package akeebaengine * @copyright Copyright (c)2006-2022 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Engine\Archiver; defined('AKEEBAENGINE') || die(); use Akeeba\Engine\Factory; use Akeeba\Engine\Util\Transfer\Ftp; use Akeeba\Engine\Util\Transfer\FtpCurl; use RuntimeException; /** * Direct Transfer Over FTP Over cURL archiver class * * Transfers the files to a remote FTP server instead of putting them in * an archive * */ class Directftpcurl extends Directftp { /** @var bool Could we connect to the server? */ public $connect_ok = false; /** @var Ftp FTP resource handle */ protected $ftpTransfer; /** @var string FTP hostname */ protected $host; /** @var string FTP port */ protected $port; /** @var string FTP username */ protected $user; /** @var string FTP password */ protected $pass; /** @var bool Should we use FTP over SSL? */ protected $usessl; /** @var bool Should we use passive FTP? */ protected $passive; /** @var bool Enable the passive mode workaround? */ protected $passiveWorkaround = true; /** @var string FTP initial directory */ protected $initdir; /** * Initialises the archiver class, seeding the remote installation * from an existent installer's JPA archive. * * @param string $targetArchivePath Absolute path to the generated archive (ignored in this class) * @param array $options A named key array of options (optional) * * @return void */ public function initialize($targetArchivePath, $options = []) { Factory::getLog()->debug(__CLASS__ . " :: new instance"); $registry = Factory::getConfiguration(); $this->host = $registry->get('engine.archiver.directftpcurl.host', ''); $this->port = $registry->get('engine.archiver.directftpcurl.port', '21'); $this->user = $registry->get('engine.archiver.directftpcurl.user', ''); $this->pass = $registry->get('engine.archiver.directftpcurl.pass', ''); $this->initdir = $registry->get('engine.archiver.directftpcurl.initial_directory', ''); $this->usessl = $registry->get('engine.archiver.directftpcurl.ftps', false); $this->passive = $registry->get('engine.archiver.directftpcurl.passive_mode', true); $this->passiveWorkaround = $registry->get('engine.archiver.directftpcurl.passive_mode_workaround', true); if (isset($options['host'])) { $this->host = $options['host']; } if (isset($options['port'])) { $this->port = $options['port']; } if (isset($options['user'])) { $this->user = $options['user']; } if (isset($options['pass'])) { $this->pass = $options['pass']; } if (isset($options['initdir'])) { $this->initdir = $options['initdir']; } if (isset($options['usessl'])) { $this->usessl = $options['usessl']; } if (isset($options['passive'])) { $this->passive = $options['passive']; } if (isset($options['passive_fix'])) { $this->passiveWorkaround = $options['passive_fix'] ? true : false; } // You can't fix stupid, but at least you get to shout at them if (strtolower(substr($this->host, 0, 6)) == 'ftp://') { Factory::getLog()->warning('YOU ARE *** N O T *** SUPPOSED TO ENTER THE ftp:// PROTOCOL PREFIX IN THE FTP HOSTNAME FIELD OF THE DirectFTP ARCHIVER ENGINE.'); Factory::getLog()->warning('I am trying to fix your bad configuration setting, but the backup might fail anyway. You MUST fix this in your configuration.'); $this->host = substr($this->host, 6); } $this->connect_ok = $this->connectFTP(); Factory::getLog()->debug(__CLASS__ . " :: FTP connection status: " . ($this->connect_ok ? 'success' : 'FAIL')); } /** * Tries to connect to the remote FTP server and change into the initial directory * * @return bool True is connection successful, false otherwise * * @throws RuntimeException */ protected function connectFTP() { Factory::getLog()->debug('Connecting to remote FTP'); $options = [ 'host' => $this->host, 'port' => $this->port, 'username' => $this->user, 'password' => $this->pass, 'directory' => $this->initdir, 'ssl' => $this->usessl, 'passive' => $this->passive, 'passive_fix' => $this->passiveWorkaround, ]; $this->ftpTransfer = new FtpCurl($options); return true; } }