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.
551 lines
19 KiB
551 lines
19 KiB
<?php |
|
|
|
/** |
|
* @param BackupInfo $bkp |
|
* @param $erroDef |
|
* |
|
* @return array |
|
*/ |
|
function GetErroBkp(BackupInfo $bkp, $erroDef) { |
|
$msg = $msgreal = null; |
|
if (isset($bkp)) { |
|
$msg = $bkp->GetMessage(); |
|
$msgreal = $bkp->GetRealMessage(); |
|
} |
|
|
|
$erros = error_get_last(); |
|
$msg = $msg ? $msg : "Erro ao realizar o backup!"; |
|
$msgreal = $msgreal ? $msgreal : $erroDef; |
|
$msgreal .= " Sys: " . $erros["message"]; |
|
|
|
return array("msg" => $msg, "real" => $msgreal); |
|
} |
|
|
|
function ServidorAtivo() { |
|
$data = time(); |
|
$filename = "/tmp/backup_server.reg"; |
|
$dataFile = file_exists($filename) ? file_get_contents($filename) : $data; |
|
|
|
return ($data - $dataFile) < TEMPO_EXPIRA; |
|
} |
|
|
|
function RegServidor() { |
|
$filename = "/tmp/backup_server.reg"; |
|
$handle = fopen($filename, "w"); |
|
fwrite($handle, time()); |
|
fclose($handle); |
|
} |
|
|
|
function GetConfiguracoes($isManual = false) { |
|
global $tpId, $horaAtual; |
|
$query = GetQueryBkp($isManual); |
|
$result = pg_query($query); |
|
|
|
if (!$result) { |
|
Excpt("Não foi possível selecionar as configurações no banco: $query", __FUNCTION__); |
|
} |
|
|
|
$return = array(); |
|
|
|
while ($dados = pg_fetch_array($result, null, PGSQL_ASSOC)) { |
|
$cfg_id = $dados["cfg_id"]; |
|
/* |
|
* Qdo bkp manual ? possível indicar o tipo(audio, configuracaoes, etc) pela linha de comando. |
|
*/ |
|
if ($isManual && $tpId) { |
|
$dados["tp_id"] = $tpId; |
|
} |
|
$return[$cfg_id]['config'] = $dados; |
|
|
|
/* |
|
* Horario de agendamento do bakcup. |
|
*/ |
|
$agd = explode(';', $dados["qt_agenda"]); |
|
$return[$cfg_id]['agenda'] = $isManual ? array($horaAtual) : $agd; |
|
|
|
$email = explode(';', $dados["cfg_email"]); |
|
$return[$cfg_id]['email'] = $email; |
|
//b.dst_host, b.dst_porta, b.dst_user_anonimo, b.dst_user, b.dst_senha, dst_diretorio |
|
$return[$cfg_id]['destino'] = array |
|
( |
|
"proto" => $dados["prt_id"], |
|
"host" => $dados["dst_host"], |
|
"port" => $dados["dst_porta"], |
|
"anon" => $dados["dst_user_anonimo"], |
|
"user" => $dados["dst_user"], |
|
"pass" => $dados["dst_senha"], |
|
"dir" => $dados["dst_diretorio"], |
|
"timeout" => 15 |
|
); |
|
} |
|
return $return; |
|
} |
|
|
|
function GetQueryBkp($isManual = 0) { |
|
//case when(b.prt_id = 4)then b.dst_diretorio_local else b.dst_diretorio_remoto end as dst_diretorio |
|
// $param = $isManual ? " and a.cfg_id = 0 " : " and a.cfg_status <> 9 "; |
|
$param = " and a.cfg_status <> 9 "; |
|
|
|
return "SELECT a.cfg_id, a.cfg_descricao, a.cfg_deleta_antigo, a.cfg_email, a.tp_id, a.frq_id, a.qt_id, f.qt_agenda, |
|
b.prt_id, b.dst_host, b.dst_porta, b.dst_user_anonimo, b.dst_user, b.dst_senha, b.dst_diretorio_remoto AS dst_diretorio |
|
FROM pbx_backup_configuracao a, pbx_backup_destino b, pbx_backup_protocolo c, pbx_backup_tipo d, |
|
pbx_backup_frequencia e, pbx_backup_frequencia_qtde f |
|
WHERE b.dst_id = a.dst_id |
|
AND c.prt_id = b.prt_id |
|
AND d.tp_id = a.tp_id |
|
AND e.frq_id = a.frq_id |
|
AND f.qt_id = a.qt_id" . $param; |
|
} |
|
|
|
function VerificaBkpReg($cfg_id, $data, $hora) { |
|
global $isManual, $debug; |
|
if ($isManual || $debug) { |
|
// return true; |
|
} |
|
|
|
$query = "select count(*) from pbx_backup where cfg_id = '$cfg_id' and bkp_data = '$data' and bkp_hora = '$hora' and bkp_status = 0"; |
|
$result = pg_query($query); |
|
if (!$result) { |
|
Excpt("Não foi possível verificar o registro do backup: $query", __FUNCTION__, ErrorGetLast()); |
|
} |
|
$row = pg_fetch_row($result); |
|
|
|
return !$row[0]; |
|
} |
|
|
|
function RegistraBkp($db, $bkpInfo, $bkpFile, $erros = array()) { |
|
global $configDestinoUid; |
|
try { |
|
$regErro = count($erros); |
|
$result = pg_query($db, 'begin'); |
|
$query = "INSERT INTO pbx_backup(cfg_id, tp_id, bkp_arquivo, bkp_tamanho, bkp_data, bkp_hora, bkp_minuto, bkp_status,bkp_log, bkp_log_erro) VALUES(%s,%s,%s,%s,%s,%s,'0',%s,%s,%s)"; |
|
|
|
$query = sprintf($query, QuotedStr($bkpInfo["cfg_id"]), QuotedStr($bkpInfo["tp_id"]), QuotedStr($bkpInfo["dir"]), QuotedStr($bkpInfo['size_bkp']), QuotedStr($bkpInfo["data"]), QuotedStr($bkpInfo["hora"]), ($regErro ? "'1'" : "'0'"), ($regErro ? QuotedStr($erros['msg']) : "null"), ($regErro ? QuotedStr($erros['real']) : "null")); |
|
$result = pg_query($db, $query); |
|
if (!$result) { |
|
Excpt("Erro ao registrar os arquivos do backup", __FUNCTION__, "Cmd-> " . $query . "Erro->" . |
|
ErrorGetLast()); |
|
} |
|
|
|
if (!$regErro) { |
|
$result = false; |
|
$bkp_id = GetCurrVal('pbx_backup'); |
|
if (!$bkp_id) { |
|
Excpt(sprintf("Não foi possivel recuperar o id do backup: %s Data: %s Hora: %s", $bkpInfo["cfg_descricao"], $bkpInfo["data"], $bkpInfo["hora"]), __FUNCTION__); |
|
} |
|
|
|
foreach ($bkpFile as $userField => $arFils) { |
|
$query = "INSERT INTO pbx_backup_arquivos(cfg_id, bkp_id, arq_nome, arq_size, arq_destino, uniqueid,arq_hash)VALUES(%s,%s,%s,%s,%s,%s,%s)\n"; |
|
$uniqueId = isset($configDestinoUid[$userField]) ? $configDestinoUid[$userField] : "null"; |
|
$query = sprintf($query, QuotedStr($bkpInfo["cfg_id"]), QuotedStr($bkp_id), QuotedStr($arFils["origem"]), QuotedStr($arFils["size"]), QuotedStr($arFils["destino"]), QuotedStr($uniqueId), QuotedStr($arFils["hash"])); |
|
|
|
$result = pg_query($db, $query); |
|
if (!$result) { |
|
break; |
|
} |
|
} |
|
if (!$result) { |
|
Excpt("Erro ao registrar os arquivos do backup", __FUNCTION__, "Cmd-> " . $query . "Erro->" . |
|
ErrorGetLast()); |
|
} |
|
} |
|
|
|
if ($result) { |
|
$result = pg_query($db, 'commit'); |
|
} |
|
if (!$result) { |
|
Excpt("Não foi possivel concluir a transa??o!", __FUNCTION__, "Cmd-> " . $query . "Erro->" . |
|
ErrorGetLast()); |
|
} |
|
logBkp(sprintf("O backup: %s foi registrado com sucesso!", $bkpInfo["cfg_descricao"]), true, false); |
|
} catch (Exception $e) { |
|
pg_query($db, 'rollback'); |
|
logBkp($e->getMessage(), true, false); |
|
} |
|
} |
|
|
|
function GetBkpFiles($cfg_id, $hora, $type, BackupConfig $bkpConfig) { |
|
global $configDestinoUid, $dataAtualBD; |
|
|
|
$isManual = $bkpConfig->isManual; |
|
$dataManual = $bkpConfig->data; |
|
|
|
$listFiles = array(); |
|
$base_bkp = $isManual ? BACKUP_PATH_BASE_MANUAL : BACKUP_PATH_BASE; |
|
|
|
if (!file_exists($base_bkp)) { |
|
$cmd = "mkdir -p $base_bkp"; |
|
system($cmd); |
|
if (!file_exists($base_bkp)) { |
|
Excpt("Não foi possível criar o diretório base! Msg: $cmd", __FUNCTION__); |
|
} |
|
} |
|
|
|
$baseLocalAudio = BACKUP_PATH_AUDIO; |
|
|
|
$fileSqlDados = sprintf("bkp_dados_%s_%s_%s.sql", $cfg_id, $hora, Date('dmY_H')); |
|
$fileDadosComp = sprintf("bkp_dados_%s_%s_%s.tar.gz", $cfg_id, $hora, Date('dmY_H')); |
|
$fileConfig = sprintf("bkp_config_%s_%s_%s.tar.gz", $cfg_id, $hora, Date('dmY_H')); |
|
|
|
|
|
$cmdTarConfig = sprintf("tar -czf %s%s /etc/asterisk/* /etc/dahdi/* /var/lib/asterisk/*", $base_bkp, $fileConfig); |
|
$cmdDatabase = sprintf("pg_dump pbx > %s%s", $base_bkp, $fileSqlDados); |
|
$cmdTarDatabase = sprintf("tar -czf %s%s -C %s %s", $base_bkp, $fileDadosComp, $base_bkp, $fileSqlDados); |
|
|
|
if ($type == BKP_TIPO_AUDIO) { |
|
if ($isManual) { |
|
$dataAtualBD = $dataManual; |
|
} |
|
|
|
$query = "select userfield, uniqueid from pbx_bilhetes a where data_bilhete = '$dataAtualBD'\n"; |
|
if ($bkpConfig->isDiferencial) { |
|
$query .= "and not exists(select '' from pbx_backup_arquivos where uniqueid = a.uniqueid and cfg_id = '$cfg_id')\n"; |
|
} |
|
$query .= "and coalesce(trim(userfield), '') <> ''\n"; |
|
$result = pg_query($query); |
|
|
|
if (!$result) { |
|
Excpt("Não foi possível listar os arquivos de backup", __FUNCTION__); |
|
} |
|
if (!pg_num_rows($result)) { |
|
logBkp("Não existem arquivos para realizar o backup."); |
|
|
|
return false; |
|
} |
|
while ($row = pg_fetch_row($result)) { |
|
if (file_exists($baseLocalAudio . $row[0])) { |
|
$listFiles[$row[0]] = $baseLocalAudio . $row[0]; |
|
$configDestinoUid[$row[0]] = $row[1]; |
|
} |
|
} |
|
} else { |
|
if (($type == BKP_TIPO_CONFIG_DADOS) || ($type == BKP_TIPO_DADOS)) { |
|
/* |
|
* Dump da base de dados. |
|
*/ |
|
$ret = ''; |
|
//system($cmdDatabase, $ret); |
|
$ret = ExecutaComando($cmdDatabase); |
|
$arquivoSqlBackup = $base_bkp . $fileSqlDados; |
|
if (!file_exists($arquivoSqlBackup)) { |
|
Excpt("Não foi possível fazer o dump da base de dados! Msg: $ret cmd: $cmdDatabase", __FUNCTION__); |
|
} |
|
|
|
/* |
|
* Compacta o dump. |
|
*/ |
|
$ret = ''; |
|
system($cmdTarDatabase, $ret); |
|
$arquivoSqlComp = $base_bkp . $fileDadosComp; |
|
if (!file_exists($arquivoSqlComp)) { |
|
Excpt("Não foi possível compactar o dump da base de dados! Msg: $ret", __FUNCTION__); |
|
} |
|
$hash = hash_file("sha1", $arquivoSqlComp); |
|
$listFiles[$fileDadosComp] = array('file' => $arquivoSqlComp, 'hash' => $hash); |
|
/* |
|
* Exclui o dump sql. |
|
*/ |
|
@unlink($arquivoSqlBackup); |
|
} |
|
|
|
if (($type == BKP_TIPO_CONFIG_DADOS) || ($type == BKP_TIPO_CONFIG)) { |
|
/* |
|
* Compacta os arquivos de configura??o. |
|
*/ |
|
$ret = ''; |
|
system($cmdTarConfig, $ret); |
|
$arquivoConfigBackup = $base_bkp . $fileConfig; |
|
if (!file_exists($arquivoConfigBackup)) { |
|
Excpt("Não foi possível compactar os aquivos de configuração! Msg: $ret", __FUNCTION__); |
|
} |
|
$hash = hash_file("sha1", $arquivoConfigBackup); |
|
$listFiles[$fileConfig] = array('file' => $arquivoConfigBackup, 'hash' => $hash); |
|
} |
|
} |
|
|
|
return $listFiles; |
|
} |
|
|
|
function ApagaBkp($db) { |
|
|
|
$nomeFile = ''; |
|
/* |
|
* Armazena os backups apagados. |
|
*/ |
|
$bkp = array(); |
|
$query = " SELECT a.arq_nome, c.cfg_descricao, b.bkp_data, c.tp_id, b.bkp_id |
|
FROM pbx_backup_arquivos a, pbx_backup b, pbx_backup_configuracao c |
|
WHERE b.bkp_id = a.bkp_id |
|
AND c.cfg_id = b.cfg_id |
|
AND b.bkp_status = 2 |
|
AND c.tp_id <> 1"; |
|
$result = pg_query($db, $query); |
|
if (!$result) { |
|
Excpt("Não foi possível listar os arquivos a serem excluidos!", __FUNCTION__); |
|
} |
|
|
|
while ($dados = pg_fetch_array($result)) { |
|
$nomeFile = trim($dados["arq_nome"]); |
|
@unlink($nomeFile); |
|
$bkp[$dados["bkp_id"]] = 1; |
|
} |
|
|
|
$erroMsg = array(); |
|
foreach ($bkp as $key => $value) { |
|
$query = "update pbx_backup set bkp_status = '3' where bkp_id = '$key'"; |
|
$result = pg_query($db, $query); |
|
if (!$result) { |
|
$erro = error_get_last(); |
|
$erroMsg[] = ($query . "Erro: " . $erro["message"] . "\n"); |
|
} |
|
} |
|
|
|
if ($erroMsg) { |
|
Excpt(implode($erroMsg), __FUNCTION__); |
|
} |
|
} |
|
|
|
function ApagaBkpTmp($db) { |
|
$nomeFile = ''; |
|
/* |
|
* Armazena os backups apagados. |
|
*/ |
|
$bkp = array(); |
|
$query = "SELECT a.arq_nome, c.cfg_descricao, b.bkp_data, c.tp_id, b.bkp_id |
|
FROM pbx_backup_arquivos a, pbx_backup b, pbx_backup_configuracao c |
|
WHERE b.bkp_id = a.bkp_id |
|
AND c.cfg_id = b.cfg_id |
|
AND b.bkp_status NOT IN(2,3) |
|
AND c.tp_id <> 1 |
|
AND (now()::DATE - b.bkp_data) >= c.cfg_deleta_antigo |
|
AND c.cfg_deleta_antigo > 0"; |
|
|
|
$result = pg_query($db, $query); |
|
if (!$result) { |
|
Excpt("Não foi possível listar os arquivos a serem excluidos!", __FUNCTION__); |
|
} |
|
|
|
while ($dados = pg_fetch_array($result)) { |
|
$nomeFile = trim($dados["arq_nome"]); |
|
if (file_exists($nomeFile)) { |
|
@unlink($nomeFile); |
|
} |
|
$bkp[$dados["bkp_id"]] = 1; |
|
} |
|
|
|
$erroMsg = array(); |
|
foreach ($bkp as $key => $value) { |
|
$query = "update pbx_backup set bkp_status = '4' where bkp_id = '$key'"; |
|
$result = pg_query($db, $query); |
|
if (!$result) { |
|
$erro = error_get_last(); |
|
$erroMsg[] = ($query . "Erro: " . $erro["message"] . "\n"); |
|
} |
|
} |
|
|
|
if ($erroMsg) { |
|
Excpt(implode($erroMsg), __FUNCTION__); |
|
} |
|
} |
|
|
|
function GetDataServer($soma = 0, $fmt = '') { |
|
$data = new CalcDataHora(); |
|
if ($soma) { |
|
$data->somaDia($soma); |
|
} |
|
|
|
return $data->getData($fmt); |
|
} |
|
|
|
function GetDataHoraServer($soma = 0, $fmt = '') { |
|
$data = new CalcDataHora(); |
|
if ($soma) { |
|
$data->somaDia($soma); |
|
} |
|
|
|
return $data->getDataHora($fmt); |
|
} |
|
|
|
function GetParamEmail($db) { |
|
$query = "SELECT wkf_smtp, wkf_smtp_port, wkf_smtp_user, wkf_smtp_senha FROM pbx_workflow_parametros"; |
|
$result = pg_query($db, $query); |
|
$row = pg_fetch_array($result); |
|
|
|
return $row; |
|
} |
|
|
|
function EnviaEmail($db, $bkpInfo, $alerta = false) { |
|
global $wkfParam, $isManual; |
|
|
|
if ($isManual) { |
|
return true; |
|
} |
|
|
|
$query = sprintf("SELECT cfg_email FROM pbx_backup_configuracao WHERE cfg_id = '%s'", $bkpInfo['cfg_id']); |
|
$result = pg_query($db, $query); |
|
if (!pg_num_rows($result)) { |
|
Excpt("Não existem emails configurados para este backup!", __FUNCTION__); |
|
} |
|
|
|
$row = pg_fetch_row($result); |
|
$mail = trim($row[0]); |
|
if (!$mail) { |
|
Excpt("Não existem emails configurados para este backup!", __FUNCTION__); |
|
} |
|
|
|
$emails = preg_split('/[\,,;]/', $mail); |
|
|
|
if (!$wkfParam) { |
|
$wkfParam = GetParamEmail($db); |
|
} |
|
$body = GetBody($db, $bkpInfo, $alerta); |
|
if (!$body) { |
|
Excpt("Não foi possível carregar o corpo do email!", __FUNCTION__); |
|
} |
|
|
|
$dataEnvio = date('d/m/Y'); |
|
|
|
foreach ($emails as $email) { |
|
$emailNome = ''; |
|
|
|
/* |
|
* Carrega parametros para o array: |
|
* $wkfParam[ wkf_smtp, |
|
* wkf_smtp_user, wkf_smtp_senha, wkf_smtp_port, wkf_smtp_requer_aut] |
|
*/ |
|
$mail = new PHPMailer(); |
|
$mail->IsSMTP(); |
|
$mail->Host = $wkfParam["wkf_smtp"]; |
|
$mail->Port = $wkfParam["wkf_smtp_port"]; |
|
$mail->SMTPAuth = $wkfParam["wkf_smtp_user"] != ""; |
|
|
|
if ($mail->SMTPAuth) { |
|
/* |
|
* Autentica??o smtp |
|
*/ |
|
$mail->Username = $wkfParam["wkf_smtp_user"]; |
|
$mail->Password = $wkfParam["wkf_smtp_senha"]; |
|
} |
|
|
|
$mail->From = $wkfParam["wkf_smtp_user"]; |
|
$mail->FromName = "Backup Simples IP"; |
|
|
|
if (!empty($emailNome)) { |
|
$mail->AddAddress($email, $emailNome); |
|
} else { |
|
$mail->AddAddress($email); |
|
} |
|
|
|
$mail->AddCC($wkfParam["wkf_smtp_user"], 'WorkFlow'); |
|
$mail->IsHTML(true); |
|
$mail->CharSet = 'iso-8859-1'; |
|
$mail->Subject = "Registro de Backup"; |
|
|
|
/* |
|
* Adciona imagens do html |
|
*/ |
|
$mail->AddEmbeddedImage("/var/www/html/aplicativo/img/miniLogo.gif", "miniLogo"); |
|
|
|
$mail->Body = $body; |
|
$mail->AltBody = $body; |
|
$enviado = $mail->Send(); |
|
$mail->ClearAllRecipients(); |
|
$erro = $mail->ErrorInfo; |
|
|
|
if (!$enviado) { |
|
$msg = "Email: $email n?o pode ser enviado Data Envio: $dataEnvio!"; |
|
Excpt($msg, "EnviaEmail", $erro); |
|
} |
|
|
|
$msg = "Email: $email enviado com sucesso! Data Envio: $dataEnvio\n"; |
|
logBkp($msg); |
|
} |
|
|
|
return true; |
|
} |
|
|
|
function GetBody($db, $bkpInfo, $alerta) { |
|
global $origem; |
|
$filename = "/var/lib/asterisk/scripts/backup/backup.htm"; |
|
$arq = file_get_contents($filename); |
|
|
|
/* |
|
* Verifica se conseguiu carregar o arquivo para compor a mensagem html a ser enviada. |
|
*/ |
|
if (empty($arq)) { |
|
Excpt("Não foi possível carregar o template do email!", __FUNCTION__); |
|
}; |
|
|
|
$query = sprintf("SELECT a.cfg_descricao, b.dst_nome, b.dst_host, b.dst_diretorio_remoto, c.prt_descricao, d.tp_desc, |
|
b.prt_id |
|
FROM pbx_backup_configuracao a, pbx_backup_destino b, pbx_backup_protocolo c, pbx_backup_tipo d |
|
WHERE b.dst_id = a.dst_id |
|
AND c.prt_id = b.prt_id |
|
AND d.tp_id = a.tp_id |
|
AND a.cfg_id = '%s'", $bkpInfo['cfg_id']); |
|
$result = pg_query($db, $query); |
|
|
|
/* |
|
* Verifica se a consulta foi executada com sucesso. |
|
*/ |
|
if (!$result) { |
|
Excpt("Erro carregar as informa??es de configura??o do backup! Cmd: $query", __FUNCTION__, ErrorGetLast()); |
|
}; |
|
|
|
/* |
|
* Verifica se existem informa??es sobre o backup informado. |
|
*/ |
|
if (!pg_num_rows($result)) { |
|
Excpt("Não foi possível carregar as informa??es de configura??o! Cmd: $query", __FUNCTION__); |
|
}; |
|
|
|
$row = pg_fetch_array($result); |
|
$info = array(); |
|
$info["origem"] = $origem; |
|
$info["cfg_descricao"] = $row["cfg_descricao"]; |
|
$info["data"] = $bkpInfo["data"]; |
|
$info["hora"] = $bkpInfo["hora"]; |
|
$info["prt_descricao"] = $row["prt_descricao"]; |
|
$info["dst_descricao"] = ($row["prt_id"] == PROTO_LOCAL) ? "Local" : sprintf("[%s][%s][%s]", $row["dst_nome"], $row["dst_host"], $row["dst_diretorio_remoto"]); |
|
$info["bkp_tamanho"] = $bkpInfo["bkp_tamanho"] . "(b)"; |
|
$info["tp_desc"] = $row["tp_desc"]; |
|
$msg = trim($bkpInfo["log"]); |
|
|
|
if (!$msg) { |
|
$msg = trim($bkpInfo["realLog"]); |
|
} |
|
if ($alerta) { |
|
if (!$msg) { |
|
$info["msg"] = "Erro ao realizar o backup!"; |
|
} else { |
|
$info["msg"] = "Erro: $msg"; |
|
} |
|
} else { |
|
$info["msg"] = "Backup conclu?do com sucesso!"; |
|
} |
|
|
|
foreach ($info as $key => $value) { |
|
$arq = str_replace('{' . $key . '}', $value, $arq); |
|
} |
|
|
|
return $arq; |
|
} |
|
|
|
function ExecutaComando($comando) { |
|
$query = "SELECT usuario_servidor, senha_servidor, porta_servidor FROM pbx_conf_padrao"; |
|
$result = pg_query($query); |
|
|
|
$dados = pg_fetch_array($result); |
|
$usuario_servidor = $dados['usuario_servidor']; |
|
$senha_servidor = $dados['senha_servidor']; |
|
$porta_servidor = $dados['porta_servidor']; |
|
|
|
//endereco do servidor onde ser? executado o comando |
|
$ssh = new Net_SSH2('127.0.0.1', $porta_servidor); |
|
if (!$ssh->login($usuario_servidor, $senha_servidor)) { |
|
return false; |
|
} |
|
logBkp("Iniciando dump da base de dados"); |
|
|
|
return $ssh->exec($comando); |
|
}
|
|
|