forked from SimplesIP/pabx-app
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.
104 lines
3.7 KiB
104 lines
3.7 KiB
<?php |
|
|
|
/* |
|
* To change this license header, choose License Headers in Project Properties. |
|
* To change this template file, choose Tools | Templates |
|
* and open the template in the editor. |
|
*/ |
|
|
|
/** |
|
* Description of BackupRede |
|
* |
|
* @author Victor |
|
* |
|
* @property BackupInfo $backup |
|
*/ |
|
final class BackupRede extends AbstractLocalLan { |
|
|
|
protected $_diretorioRedeLocal = "/mnt/bk_simples/"; |
|
private $_networkMounted = false; |
|
|
|
public function __destruct() { |
|
if ($this->_networkMounted) { |
|
$this->Debug("Desconectando do host '{$this->GetInfo('host')}'"); |
|
$this->sys(sprintf("umount -f %s", $this->_diretorioRedeLocal)); |
|
$this->Debug("Desconectado do host '{$this->GetInfo('host')}'"); |
|
} else { |
|
$this->Debug("Nenhum mapeameto de rede ativo para desmontar"); |
|
} |
|
$this->Debug(self::$BACKUP_FINALIZADO); |
|
} |
|
|
|
public function Connect(BackupInfo $backup) { |
|
$this->backup = $backup; |
|
$this->Debug("Conectando ao host '{$this->backup->host}' na rede..."); |
|
$host = str_replace("\\", "/", $this->backup->host . $this->backup->dir); |
|
$aut = $this->backup->anon ? "guest" : sprintf("username=%s,pass=%s", $this->backup->user, $this->backup->pass); |
|
if (!file_exists($this->_diretorioRedeLocal)) { |
|
$this->Debug("'{$this->_diretorioRedeLocal}' não existe. Criando diretório..."); |
|
$this->sys(sprintf("mkdir -o %s", $this->_diretorioRedeLocal)); |
|
if (!file_exists($this->_diretorioRedeLocal)) { |
|
$this->Error("Não foi possível criar o diretório '{$this->_diretorioRedeLocal}' para mapeamento da rede"); |
|
|
|
return false; |
|
} |
|
$this->Debug("Diretório criado"); |
|
} |
|
if (!is_readable($this->_diretorioRedeLocal)) { |
|
$this->Error("Sem permissão de leitura para o diretório {$this->_diretorioRedeLocal}"); |
|
|
|
return false; |
|
} else { |
|
if (!is_writable($this->_diretorioRedeLocal)) { |
|
$this->Error("Sem permissão de escrita para o diretório {$this->_diretorioRedeLocal}"); |
|
|
|
return false; |
|
} |
|
} |
|
|
|
// mount -t cifs -o username=user,pass=SimpleS_root //192.168.115.139/Downloads/ /mnt/bk_simples/ |
|
$cmd = sprintf("mount -t cifs -o %s %s %s", $aut, $host, $this->_diretorioRedeLocal); |
|
$this->Debug("Montando mapeamento de unidade do host na rede..."); |
|
|
|
$output = $this->sys($cmd); |
|
if (is_null($output)) { |
|
$this->Debug("Não foi possível conectar ao host"); |
|
|
|
return false; |
|
} |
|
if (StringClass::ContemTexto($output, "exclusiva de root")) { |
|
$this->Error($output); |
|
|
|
return false; |
|
} |
|
$this->Debug("Mapeamento concluído com sucesso"); |
|
$this->backup->dirAtual = $host; |
|
$this->_networkMounted = true; |
|
|
|
return true; |
|
} |
|
|
|
public function Upload(array $dadosArquivo, $remoteFile) { |
|
$localFile = $dadosArquivo['file']; |
|
$hash = $dadosArquivo['hash']; |
|
$arquivoCopiado = sprintf("%s%s", $this->_diretorioRedeLocal, $remoteFile); |
|
|
|
$cmd = sprintf("cp -u %s %s", $localFile, $arquivoCopiado); |
|
$this->Debug("Copiando arquivos de backup para o host na rede..."); |
|
$result = $this->sys($cmd); |
|
|
|
if (!file_exists($arquivoCopiado)) { |
|
$this->Error("Não foi possível gravar o arquivo remoto!\n" . $cmd); |
|
|
|
return false; |
|
} |
|
$remoto = str_replace("\\", "/", $this->backup->host . $this->backup->dir . $remoteFile); |
|
$this->Debug("Backup copiado para [$remoto]"); |
|
|
|
//apaga arquivo local |
|
$this->unlink($localFile); |
|
|
|
return $this->CheckHash($hash, $arquivoCopiado); |
|
} |
|
|
|
}
|
|
|