One Hat Cyber Team
Your IP :
216.73.216.36
Server IP :
162.240.179.46
Server :
Linux vps-14493116.nutrivittasaude.com.br 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64
Server Software :
Apache
PHP Version :
8.2.31
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
lifeprimeti
/
meta.lifeprimeti.com.br
/
admin
/
View File Name :
backup.php
<?php require_once __DIR__ . '/../config/database.php'; requireSuperAdmin(); $titulo = 'Backup e Restauracao'; require_once __DIR__ . '/../includes/header.php'; $backupDir = __DIR__ . '/../backup/'; if (!is_dir($backupDir)) { mkdir($backupDir, 0755, true); } function findMySqlDump() { $candidates = [ 'C:\\xampp\\mysql\\bin\\mysqldump.exe', 'C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqldump.exe', 'C:\\Program Files\\MySQL\\MySQL Server 8.4\\bin\\mysqldump.exe', 'C:\\Program Files\\MySQL\\MySQL Server 9.0\\bin\\mysqldump.exe', 'C:\\Program Files (x86)\\MySQL\\MySQL Server 5.7\\bin\\mysqldump.exe', ]; foreach ($candidates as $path) { if (file_exists($path)) return $path; } $which = trim(shell_exec('where mysqldump 2>nul') ?: ''); if ($which && file_exists($which)) return $which; return 'mysqldump'; } function findMySql() { $candidates = [ 'C:\\xampp\\mysql\\bin\\mysql.exe', 'C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysql.exe', 'C:\\Program Files\\MySQL\\MySQL Server 8.4\\bin\\mysql.exe', 'C:\\Program Files\\MySQL\\MySQL Server 9.0\\bin\\mysql.exe', 'C:\\Program Files (x86)\\MySQL\\MySQL Server 5.7\\bin\\mysql.exe', ]; foreach ($candidates as $path) { if (file_exists($path)) return $path; } $which = trim(shell_exec('where mysql 2>nul') ?: ''); if ($which && file_exists($which)) return $which; return 'mysql'; } $MYSQLDUMP = findMySqlDump(); $MYSQL = findMySql(); if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['acao'])) { if ($_POST['acao'] === 'backup') { $filename = 'barbearia_' . date('Y-m-d_H-i-s') . '.sql'; $filepath = $backupDir . $filename; $command = sprintf( '%s --user=%s --host=%s --password=%s %s > %s 2>&1', $MYSQLDUMP, DB_USER, DB_HOST, DB_PASS, DB_NAME, escapeshellarg($filepath) ); $output = null; $returnCode = null; exec($command, $output, $returnCode); if ($returnCode === 0) { $_SESSION['success_msg'] = 'Backup realizado com sucesso: ' . $filename; } else { $_SESSION['error_msg'] = 'Erro ao executar mysqldump. Detalhes: ' . implode("\n", $output); } redirect('backup.php'); } if ($_POST['acao'] === 'restore_upload') { if (isset($_FILES['arquivo_restore']) && $_FILES['arquivo_restore']['error'] === UPLOAD_ERR_OK) { $tmpPath = $_FILES['arquivo_restore']['tmp_name']; $command = sprintf( '%s --user=%s --host=%s --password=%s %s < %s 2>&1', $MYSQL, DB_USER, DB_HOST, DB_PASS, DB_NAME, escapeshellarg($tmpPath) ); $output = null; $returnCode = null; exec($command, $output, $returnCode); if ($returnCode === 0) { $_SESSION['success_msg'] = 'Banco de dados restaurado com sucesso!'; } else { $_SESSION['error_msg'] = 'Erro ao restaurar o backup. Verifique se o arquivo .sql e valido.'; } } else { $_SESSION['error_msg'] = 'Selecione um arquivo .sql para restaurar.'; } redirect('backup.php'); } if ($_POST['acao'] === 'restore_file') { $filename = basename($_POST['arquivo']); $filepath = $backupDir . $filename; if (file_exists($filepath)) { $command = sprintf( '%s --user=%s --host=%s --password=%s %s < %s 2>&1', $MYSQL, DB_USER, DB_HOST, DB_PASS, DB_NAME, escapeshellarg($filepath) ); $output = null; $returnCode = null; exec($command, $output, $returnCode); if ($returnCode === 0) { $_SESSION['success_msg'] = 'Banco de dados restaurado com sucesso!'; } else { $_SESSION['error_msg'] = 'Erro ao restaurar o backup.'; } } else { $_SESSION['error_msg'] = 'Arquivo nao encontrado.'; } redirect('backup.php'); } if ($_POST['acao'] === 'delete') { $filename = basename($_POST['arquivo']); $filepath = $backupDir . $filename; if (file_exists($filepath)) { unlink($filepath); $_SESSION['success_msg'] = 'Arquivo excluido: ' . $filename; } else { $_SESSION['error_msg'] = 'Arquivo nao encontrado.'; } redirect('backup.php'); } } $backupFiles = []; $files = glob($backupDir . '*.sql'); if ($files) { foreach ($files as $f) { $backupFiles[] = [ 'nome' => basename($f), 'data' => filemtime($f), 'tamanho' => filesize($f), ]; } } usort($backupFiles, function ($a, $b) { return $b['data'] - $a['data']; }); ?> <div class="row"> <div class="col-md-6"> <div class="card"> <div class="card-header"> <h3 class="card-title"><i class="bi bi-cloud-arrow-up me-2 text-info"></i>Fazer Backup</h3> </div> <div class="card-body"> <p class="text-muted">Gera um dump completo do banco de dados <strong><?= DB_NAME ?></strong>.</p> <form method="POST"> <input type="hidden" name="acao" value="backup"> <button type="submit" class="btn btn-lg btn-primary"><i class="bi bi-download me-2"></i>Fazer Backup</button> </form> </div> </div> </div> <div class="col-md-6"> <div class="card"> <div class="card-header"> <h3 class="card-title"><i class="bi bi-cloud-arrow-down me-2 text-warning"></i>Restaurar Backup</h3> </div> <div class="card-body"> <p class="text-muted">Selecione um arquivo .sql para restaurar no banco de dados.</p> <form method="POST" enctype="multipart/form-data" onsubmit="return confirm('ATENCAO: Todos os dados atuais serao substituidos. Deseja continuar?')"> <input type="hidden" name="acao" value="restore_upload"> <div class="mb-3"> <input type="file" name="arquivo_restore" class="form-control" accept=".sql" required> </div> <button type="submit" class="btn btn-warning"><i class="bi bi-arrow-counterclockwise me-2"></i>Restaurar</button> </form> </div> </div> </div> </div> <div class="card mt-4"> <div class="card-header"> <h3 class="card-title"><i class="bi bi-files me-2 text-success"></i>Backups Disponiveis</h3> </div> <div class="card-body p-0"> <table class="table table-striped mb-0"> <thead> <tr> <th>Nome do Arquivo</th> <th>Data</th> <th>Tamanho</th> <th>Acoes</th> </tr> </thead> <tbody> <?php if (empty($backupFiles)): ?> <tr><td colspan="4" class="text-center text-muted py-3">Nenhum backup encontrado.</td></tr> <?php else: ?> <?php foreach ($backupFiles as $f): ?> <tr> <td><?= sanitize($f['nome']) ?></td> <td><?= formatarDataHora(date('Y-m-d H:i:s', $f['data'])) ?></td> <td><?= number_format($f['tamanho'] / 1024, 2, ',', '.') ?> KB</td> <td> <a href="<?= URL_BASE ?>backup/<?= urlencode($f['nome']) ?>" class="btn btn-sm btn-success" download><i class="bi bi-download"></i></a> <form method="POST" style="display:inline" onsubmit="return confirm('ATENCAO: Todos os dados atuais serao substituidos. Deseja continuar?')"> <input type="hidden" name="acao" value="restore_file"> <input type="hidden" name="arquivo" value="<?= sanitize($f['nome']) ?>"> <button class="btn btn-sm btn-warning"><i class="bi bi-arrow-counterclockwise"></i></button> </form> <form method="POST" style="display:inline" onsubmit="return confirm('Excluir este arquivo de backup?')"> <input type="hidden" name="acao" value="delete"> <input type="hidden" name="arquivo" value="<?= sanitize($f['nome']) ?>"> <button class="btn btn-sm btn-danger"><i class="bi bi-trash"></i></button> </form> </td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> </div> </div> <?php require_once __DIR__ . '/../includes/footer.php'; ?>