Como zipar e dezipar arquivos usando PHP

Neste artigo, vou te ensinar como zipar e dezipar arquivos usando PHP. Esta técnica é útil quando precisamos disponibilizar um conjunto de arquivos de computador para nosso usuário. É, sem dúvida, muito mais fácil enviar todos os arquivos compactados do que o envio um a um.

Além de ser mais simples para o usuário, zipar arquivos também podem ser usados para diminuir o espaço ocupado pela aplicação no servidor, como arquivos enviados pelo usuário.

Você também pode gerar rotinas inteligentes de backup utilizando esta técnica de zipar arquivos.

Separei essa função abaixo para que você possa utilizar em seus projetos.

Função para zipar arquivos

Separei esta função para que você possa utilizar em seus projetos. O ideal é que você encapsule em sua biblioteca, para utilizar nos projetos que você deseja. Basta copiar e colar.

// Função para zipar arquivos.
function create_zip($files = array(),$destination = '',$overwrite = false) {  
    //Faz uma pequena validação para saber se os arquivos existem antes de compacta-los
    if(file_exists($destination) && !$overwrite) { return false; }  
    //vars  
    $valid_files = array();  
   
    if(is_array($files)) {  
   
        foreach($files as $file) {  
            //make sure the file exists  
            if(file_exists($file)) {  
                $valid_files[] = $file;  
            }  
        }  
    }  
 
    if(count($valid_files)) {  
        //create the archive  
        $zip = new ZipArchive();  
        if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {  
            return false;  
        }  
        //Adiciona todos os arquivos
        foreach($valid_files as $file) {  
            $zip->addFile($file,$file);  
        }  
          
        //Adiciona os arquivos no Zip 
        $zip->close();  
          
        
        return file_exists($destination);  
    }  
    else  
    {  
        return false;  
    }  
}

Para utilizar, é simples. Segue um exemplo de como utilizar a função.

<?php
// crio um array de arquivos.
$files=array('arquivo1.pdf', 'arquivo2.pdf', 'arquivo.pdf');  
// utilizo a função para zipar.
create_zip($files, 'arquivoscursophp.zip', true); 
?>

 

Função para dezipar arquivos

Agora que já temos uma função para zipar, precisamos criar a função abaixo para descompactar arquivos. Veja como funciona abaixo.

//função para dezipar arquivos
function unzip($location,$newLocation)
{
        if(exec("unzip $location",$arr)){
            mkdir($newLocation);
            for($i = 1;$i< count($arr);$i++){
                $file = trim(preg_replace("~inflating: ~","",$arr[$i]));
                copy($location.'/'.$file,$newLocation.'/'.$file);
                unlink($location.'/'.$file);
            }
            return TRUE;
        }else{
            return FALSE;
        }
}

Para utilizar a função, é simples. Veja como funciona o exemplo abaixo.

<?php
// Dezipa os arquivos.
//O arquivo será descompactado na pasta dezipado/arquivos.
unzip('test.zip','dezipado/arquivos'); 
?>

 

Vote

Deixe um comentário