post

Código PHP para Fazer Backup e Download de Arquivos Pelo Navegador

Publicado em: 10/01/2024

Categorias: BlogPHP
<?php
function zipData($source, $destination) {
    if (!extension_loaded('zip') || !file_exists($source)) {
        die('A extensão Zip não está habilitada ou o diretório não existe.');
    }

    $zip = new ZipArchive();
    if (!$zip->open($destination, ZipArchive::CREATE)) {
        die('Não foi possível criar o arquivo ZIP.');
    }

    $source = realpath($source);

    if (is_dir($source)) {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

        foreach ($files as $file) {
            $file = realpath($file);

            if (is_dir($file)) {
                $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
            } elseif (is_file($file)) {
                $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
            }
        }
    } elseif (is_file($source)) {
        $zip->addFromString(basename($source), file_get_contents($source));
    }

    $zip->close();
}

// Obtém o diretório atual do script
$source = __DIR__;
$destination = 'backup.zip';
zipData($source, $destination);


if (isset($_GET['save']) && $_GET['save'] === 'true') {
    // Executar o código que salva no servidor
    echo 'Compactação concluída. Arquivo ZIP salvo em: ' . $destination;
} elseif (isset($_GET['download']) && $_GET['download'] === 'true') {
    // Executar o código que faz o download
    header('Content-Type: application/zip');
    header('Content-disposition: attachment; filename=' . $destination);
    header('Content-Length: ' . filesize($destination));
    readfile($destination);
} else {
    // Caso nenhum parâmetro seja fornecido, exibir uma mensagem de erro
    echo 'Parâmetro inválido. Use "?save=true" apenas para salvar no servidor ou "?download=true" para salvar e fazer o download pelo navegador.';
}
?>


Link de compartilhamento

Compartilhe esse conteudo nas redes sociais ou por mensagem usando o link curto abaixo. Basta clicar em cima do link para copiar.

bruno.art.br/pb/4113

ID de Referência: 4113

Sugira uma publicação

Envie uma mensagem para mim, e sugira alguma publicação de algum tema que tenha dificuldades de resolver.

Clique aqui e entre em contato


Comentários