PABX da Simples IP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

272 lines
9.8 KiB

<?php
/**
* Class BackupSend
*
* Esta classe realiza as conversação com as classes de conexão com servidores
* Tem em base criar um modelo para facilitar o transporte de arquivos e gerar
* logs efetivos para a melhor visualização do arquivo em transito.
*
* A classe tem suporte dos tipos de conexao em modo:
* 1 - FTP
* 2 - SFTP
*
* Funcionamento:
*
* Instanciação do objeto BackupSend passando em seu construtor as credencias
* de conexao:
* - HOST
* - USUARIO
* - SENHA
* - PORTA
*
* No metodo directorys sao as configuracoes de pasta para serem transportadas
* USO NAO OBRIGATORIO!
*
* @author Lucas Awade
* @version 1.1.0
*
*/
class BackupSend extends Backup {
/** @stf */
private $sftp;
/** @ftp */
private $ftp;
/** @authenticate */
private $user;
private $password;
/** @connection */
private $server;
private $port;
/** @util */
private $dirs = array();
########################################################################
#### FUNCTIONS CLASS ####
########################################################################
function __construct($server, $user, $password, $port) {
$this->server = $server;
$this->user = $user;
$this->password = $password;
$this->port = $port;
$this->log()->info("Server: {$this->server}, User: {$this->user}, Password: {$this->password}, Port: {$this->port}");
}
/**
* Diretorio padrao para a transferencia do arquivo;
* @param string $remote_dir
* @param string $file_local
*/
public function directorys($change_dir, $remote_file, $file_local) {
$this->log()->debug("FTP " . __FUNCTION__, debug_backtrace());
$this->dirs['change_dir'] = $this->removeslash($change_dir);
$this->dirs['remote_file'] = $remote_file;
$this->dirs['file_local'] = $file_local;
}
########################################################################
#### FTP ####
########################################################################
/**
* Metodo para realizar a conexao com o servidor FTP
* @return boolean
* @throws Exception
*/
public function ftp() {
$this->log()->debug("Connection FTP", debug_backtrace());
try {
if (!$this->dirs) {
$this->log()->error("Selecione os diretorios para serem enviados!");
throw new Exception($this->log()->getText());
}
/**
* Iniciando uma conexao com o servidor FTP
*/
$this->ftp = new FTPAccess($this->server, $this->port);
if(!$this->ftp->getConnection()){
$this->log()->debug("Nao foi possível realizar conexao com o FTP!", debug_backtrace());
}
if ($this->ftp->authentication($this->user, $this->password)) {
if($this->ftp->mode_passive(true)){
$this->log()->debug("Sucesso em modo passivo!", debug_backtrace());
} else {
$this->log()->debug("Nao foi possivel entrar em modo passivo!", debug_backtrace());
}
} else {
$this->log()->error("Nao foi possivel conectar com as credenciais informada!", debug_backtrace());
throw new Exception($this->log()->getText());
}
return true;
} catch (Exception $ex) {
$this->ftp->connection_close();
$this->log()->error("Backup nao enviado, " . $ex->getMessage());
return false;
}
}
/**
* Cria um arvore de pastas com ano e mes.
*/
public function ftp_folder_bydate() {
$this->log()->debug("FTP Folder Bydate", debug_backtrace());
$folders = $this->date_folders();
$this->ftp_chdir($this->dirs['change_dir']);
if ($this->ftp_chdir($folders['year'])) {
if (!$this->ftp_chdir($folders['month'])) {
if (!$this->ftp_mkdir($folders['month'])) {
return false;
}
$this->log()->debug("Diretorio {$folders['month']} criado!");
}
} else {
if ($this->ftp_mkdir($folders['year'])) {
$this->ftp_chdir($folders['year']);
if (!$this->ftp_mkdir($folders['month'])) {
return false;
}
$this->log()->debug("Diretorio {$folders['year']} e {$folders['month']} criado!");
}
}
$this->dirs['change_dir'] = "/" . $this->strslash($this->dirs['change_dir']) . $this->strslash($folders['year']) . $this->strslash($folders['month']);
return true;
}
/**
* Chamada da funcao para a finalizacao do envio do arquivo.
* @throws Exception
*/
public function ftp_finish() {
if (!$this->ftp_chdir($this->dirs['change_dir'])) {
$this->log()->error("Diretorio nao encontrado!", debug_backtrace());
return false;
}
$this->ftp_send($this->dirs['remote_file'], $this->dirs['file_local']);
return true;
}
/**
* Metodo para realizar a troca de diretorio;
* @param string $directory
* @return boolean
*/
public function ftp_chdir($directory) {
$this->log()->debug("#### FTP Change Directory ####", debug_backtrace());
if (!$directory) {
$this->log()->error("Diretorio informado vazio!");
return false;
}
$acess = $this->ftp->ch_dir($directory);
if ($acess) {
$this->log()->debug("Diretorio {$directory} encontrado!");
return true;
} else {
$this->log()->error("Diretorio {$directory} nao encontrado");
return false;
}
}
/**
* Metodo para criar diretorio.
* @param string $directory
* @throws Exception
*/
private function ftp_mkdir($directory) {
$this->log()->debug("#### FTP Make Directory ####", debug_backtrace());
$create = $this->ftp->mk_dir($directory);
if ($create) {
$this->log()->debug("Criado o diretorio!");
return true;
} else {
$this->log()->error("Nao foi possivel criar o diretorio informado!");
return false;
}
}
/**
*
* @param type $remote_file
* @param type $local_file
* @throws Exception
*/
private function ftp_send($remote_file, $local_file) {
$this->log()->debug("#### FTP Send File ####", debug_backtrace());
if (!file_exists($local_file)) {
$this->log()->error("Arquivo local nao localizado!");
throw new Exception($this->log()->getText());
}
$sended = $this->ftp->send_file($remote_file, $local_file);
if ($sended) {
$this->log()->debug("Backup enviado realizado com sucesso!");
} else {
$this->log()->error("Nao foi possivel enviar o backup!");
throw new Exception($this->log()->getText());
}
}
########################################################################
#### SFTP ####
########################################################################
/**
* Conecta no servidor SFTP.
* @return boolean
*/
public function sftp($methods = null) {
$this->log()->debug("Connection SFTP", debug_backtrace());
$this->sftp = new SFTPAccess($this->server, $this->port, $methods);
if ($this->sftp->authentication($this->user, $this->password)) {
$this->log()->debug("Conexao realizada com sucesso!");
return true;
} else {
$this->log()->error("Nao foi possivel realizar a conexao com o Servidor SFTP.");
return false;
}
}
/**
* Realiza a troca de diretorio na conexão com o SFTP
* @param string $directory
* @return boolean
*/
public function sftp_chdir($directory) {
if ($this->sftp->ch_dir($directory)) {
$this->log()->debug("Diretorio encontrado.");
return true;
} else {
$this->log()->error("Nao foi possivel encontrar o diretorio informado!");
return false;
}
}
/**
* Realiza a copia do arquivo local para o remoto.
* @param string $remote_file
* @param string $local_file
* @return boolean
*/
public function sftp_copy($remote_file, $local_file) {
if ($this->sftp->copy_file($local_file, $remote_file)) {
$this->log()->success("A copia do arquivo para o SFTP foi concluida.");
return true;
} else {
$this->log()->error("Nao foi possivel realizar a copia do arquivo para o SFTP.");
return false;
}
}
}