Compactar arquivos com PHP


1 Estrelas2 Estrelas3 Estrelas4 Estrelas5 Estrelas (6 votos, média: 4.33 de 5)
Loading ... Loading ...

Olá pessoal, hoje vou mostrar como fazer para compactar arquivo com PHP. O procedimento é muito simples, caso seu servidor esteja com o zlib habilitada basta executar um código mais ou menos assim:

  1. <?
  2. /**
  3.  * Insere um arquivo dentro de um zip.
  4.  *
  5.  * @param String $name_of_zip Nome do arquivo ZIP que será trabalhado.
  6.  * @param String $path_file Path original do arquivo que vai para o ZIP
  7.  * @param String $file_name Nome do arquivo dentro do ZIP
  8.  * @return Mixed
  9.  */
  10. function fileToZip($name_of_zip=null, $path_file=null, $file_name=null){
  11.     if(empty ($name_of_zip) || empty ($path_file) || empty ($file_name)){
  12.         return ‘Todos os parâmetros são obrigatórios’;
  13.     }
  14.  
  15.     // Cria a instancia do ZIP
  16.     $zip = new ZipArchive;
  17.     // se conseguir criar o arquivo ZIP
  18.     if( $zip->open($name_of_zip, ZIPARCHIVE::CREATE) === true ){
  19.         // Adiciona o arquivo dentro do zip
  20.         $zip->addFile($path_file, $file_name);
  21.         $zip->close(); // fecha a conexão com o ZIP
  22.         // Opcionalmente pode-se excluir o arquivo original, basta inserir uma variável nos parâmetros
  23.         //unlink(‘/path/do/arquivo/arquivo.php’);
  24.         return true;
  25.     } else {
  26.         return false;
  27.     }
  28. }
  29. ?>


Este post é uma complementação do Como descompactar arquivos com PHP e juntos podem virar uma classe muito útil.

Vamos ver se funciona? vou jogar esta função e a função do post anterior em um arquivo e rodar para ver se o arquivo foi criado corretamente:

  1. <?
  2. /**
  3.  * Insere um arquivo dentro de um zip.
  4.  *
  5.  * @param String $name_of_zip Nome do arquivo ZIP que será trabalhado.
  6.  * @param String $path_file Path original do arquivo que vai para o ZIP
  7.  * @param String $file_name Nome do arquivo dentro do ZIP
  8.  * @return Mixed
  9.  */
  10. function fileToZip($name_of_zip=null, $path_file=null, $file_name=null){
  11.     if(empty ($name_of_zip) || empty ($path_file) || empty ($file_name)){
  12.         return ‘Todos os parâmetros são obrigatórios’;
  13.     }
  14.  
  15.     // Cria a instancia do ZIP
  16.     $zip = new ZipArchive;
  17.     // se conseguir criar o arquivo ZIP
  18.     if( $zip->open($name_of_zip, ZIPARCHIVE::CREATE) === true ){
  19.         // Adiciona o arquivo dentro do zip
  20.         $zip->addFile($path_file, $file_name);
  21.         $zip->close(); // fecha a conexão com o ZIP
  22.         // Opcionalmente pode-se excluir o arquivo original, basta inserir uma variável nos parâmetros
  23.         //unlink(‘/path/do/arquivo/arquivo.php’);
  24.         return true;
  25.     } else {
  26.         return false;
  27.     }
  28. }
  29.  
  30. /**
  31.  * Esta função descompacta arquivos
  32.  * de um zip
  33.  *
  34.  * @param String $path Local do arquivo .zip
  35.  * @param String $pathunzip Pasta onde os arquivos devem ser descompactados
  36.  */
  37. function unZip($path, $pathunzip=‘.’){
  38.     # ===— Instancia a classe do Zip
  39.     $zip = new ZipArchive;
  40.     # ===— Tenta abrir o zip
  41.     if($zip->open($path)){
  42.         $return   = $zip->extractTo($pathunzip); // executa o unzip
  43.         $zip->close(); // fecha a coneção com o .zip
  44.     } else {
  45.         echo ‘O arquivo não pode ser aberto.’;
  46.     }
  47. }
  48.  
  49. /**
  50.  * Esta função retorna um array com
  51.  * os nomes dos arquivos que estão
  52.  * dentro do zip.
  53.  *
  54.  * @param String $path Local do arquivo .zip
  55.  * @return array ou false no caso de erro
  56.  */
  57. function zipToArray($path){
  58.     # ===— Instancia a classe
  59.     $zip = new ZipArchive;
  60.     # ====– Tenta abrir o zip
  61.     if($zip->open($path)){
  62.         # ===— Recupera o numero de arquivos do zip
  63.         $num_files = $zip->numFiles;
  64.         # ===— percorre os arquivos pegando os nomes e colocando em um array
  65.         for($i=0; $i<=($num_files)-1;$i++){
  66.             $saida[] = $zip->getNameIndex($i);
  67.         }
  68.         # ====— fecha a conexão
  69.         $zip->close();
  70.         # ====— Retora o array para ser manipulado
  71.         return $saida;
  72.     }
  73.     return false;
  74. }
  75. // adicionando os arquivos
  76. fileToZip(‘./nome_do_zip.zip’, ‘./texto.txt’, ‘texto.txt’);
  77. fileToZip(‘./nome_do_zip.zip’, ‘./texto.txt’, ‘texto2.txt’);
  78.  
  79. // lendo o zip criado para ver se tem algum arquivo dentro
  80. print_r(zipToArray(‘./nome_do_zip.zip’));
  81. ?>

Veja o resultado:

resultado 300x235 Compactar arquivos com PHP

Vou fazer um post sobre como criar uma classe com estas funcionalidades em breve.

Por hoje é isso…

  1. 4 Comentários to “Compactar arquivos com PHP”

  2. Boa Marcelão… como sempre detonando nos posts!
    Então, havia falado que tinha feito uma classe genérica, mas não está genérica não..rsrs.. mas como é um pouco diferente da sua, segue o código ai para sugestões e melhorias… está funcionando bem… mas quero trabalhar com a ideologia correta de OO… então me ajuda! :p

    <?php
    /**
    * Classe Zipar – Para zipar imagens de um diret�rio
    *
    * @author Rafael Ortega Bueno
    * @parametro $caminho = caminho da pasta
    * @parametro $nome = nome do novo arquivo
    **/

    class Zipador {

    public function zipar($caminho,$pasta){

    $caminho = $caminho."/";

    $tamanho = strlen("$pasta");

    for($i = 0;$i < $tamanho; $i++){

    if(substr($pasta,$i,1) == "/"){
    $nomeArquivo = substr($pasta,($i+1),$tamanho);
    }

    }

    //—-Acima Jhonatan

    $dir = opendir($caminho);
    $x = Array();

    while($file = readdir($dir)){
    array_push($x,$file);
    }

    for($i=0;$iopen(“{$new_name}.zip”, ZIPARCHIVE::CREATE) === true){
    $zip->addFile($caminho.$x[$i],$x[$i]);
    $zip->close();
    print “Arquivo zipado com sucesso!”;
    }
    else{
    print “Problemas ao zipar seu arquivo!”;
    }

    }
    }

    return “ Baixar Arquivo“;

    //echo ” location.href =’$new_name.zip’ “;

    }

    //————————————

    public function buscaNomePasta($id){

    $banco = mysql_query(“SELECT arquivo FROM envio
    WHERE idenvio = $id”);

    while($linha = mysql_fetch_array($banco)){

    $pasta = $linha['arquivo'];

    }

    return $pasta;

    }
    }

    ?>

    ReplyReply

    Por Rafael Ortega Bueno (6 comments) em 12/02/2010

  3. Pode me esclarecer uma dúvida?

    Como faço para criar o arquivo em várias partes?

    tenho uma cron que gera um backup (bd) e depois mando compactar… estava funcionando normalmente…

    mas agora o backup esta com aproximadamente 200Mb.
    e na hora de compactar da erro, ele não compacta…

    pensei em compactar em várias partes… não sei se é possível..

    obrigado

    ReplyReply

    Por Laureano (1 comments) em 09/03/2011

  4. cara gostei simples e objetiva.
    obrigado.

    ReplyReply

    Por Josué (4 comments) em 27/08/2011

  5. <?php
    //Autor : Estelvio Luis
    //Data: 08/12/2011

    //Monta o caminho
    $dwloaddir = "caminho";

    //Verifica se a pasta existe, se não cria
    !is_dir($dwloaddir) ? mkdir($dwloaddir, 0777) : "";

    $arquivo = fopen($dwloaddir."/"."teste_1.txt", "w");

    for($i = 0; $i < 10; $i++) fwrite($arquivo, "testando testando testando testando\n");

    fclose($arquivo);

    $arquivo = fopen($dwloaddir."/"."teste_2.txt", "w");

    for($i = 0; $i open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
    exit(“Não foi aberto o arquivo \n”);
    }

    $zip->addFile($dwloaddir.”/teste_1.txt”,”teste_1.txt”);
    $zip->addFile($dwloaddir.”/teste_2.txt”,”teste_2.txt”);
    $zip->close();

    ?>

    ReplyReply

    Por Estelvio (1 comments) em 06/12/2011

Coloque um Comentário

Links de comentários deveriam estar livres de nofollow.

Get Adobe Flash playerPlugin by wpburn.com wordpress themes