Ir para conteúdo
Fórum Script Brasil
  • 0

Unzip No Php


hara

Pergunta

Pessoal,

Como faço pra descomprimir um arquivo .zip inteiro pra dentro de uma pasta no PHP ?

Já tentei usando o zip_open, mas não tenho esse componente no meu servidor... Alguém tem a rotina do gzip ?

Caso alguém tenha interesse, abaixo a função de unzip com zip_open:

function unzip($fln, $path) {
  $zip = zip_open($fln);
  if ($zip) {
    while ($zip_entry = zip_read($zip)) {
      if (zip_entry_filesize($zip_entry) > 0) {
        // str_replace must be used under windows to convert "/" into "\"
        $complete_path = $path.str_replace('/','\\',dirname(zip_entry_name($zip_entry)));
        $complete_name = $path.str_replace ('/','\\',zip_entry_name($zip_entry));
        if(!file_exists($complete_path)) { 
          $tmp = '';
          foreach(explode('\\',$complete_path) AS $k) {
            $tmp .= $k.'\\';
            if(!file_exists($tmp)) {
              mkdir($tmp, 0777); 
            }
          } 
        }
        if (zip_entry_open($zip, $zip_entry, "r")) {
          $fd = fopen($complete_name, 'w');
          fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)));
          fclose($fd);
          zip_entry_close($zip_entry);
        }
      }
    }
    zip_close($zip);
  }
}
Pra descompactar:
unzip("/folder/file.zip","/folder_to_unzip/");

Abraços

Fernando Hara

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

Tem como fazer com a ZIPLib: http://br.php.net/manual/pt_BR/ref.zip.php

E acho que tem como fazer com a ZLib também, mas não tenho certeza se ela pega .zip além de .gzip: http://br.php.net/manual/pt_BR/ref.zlib.php

Na phpbrasil.com deve ter um artigo sobre isso, mas ela tá fora do ar agora... tenta ir lá mais tarde e procurar por ZIP... cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu 404error isso já me deu uma luz....

este script eu peguei no endereço que você me passou... achei bem interessante olhem só:

--------------------------------------------------------------------------------------

If you just want to unzip everything of a zip file in a directory (and create unexisting directories), let's try this:

function unzip($file, $path) {

$zip = zip_open($file);

if ($zip) {

while ($zip_entry = zip_read($zip)) {

if (zip_entry_filesize($zip_entry) > 0) {

// str_replace must be used under windows to convert "/" into "\"

$complete_path = $path.str_replace('/','\\',dirname(zip_entry_name($zip_entry)));

$complete_name = $path.str_replace ('/','\\',zip_entry_name($zip_entry));

if(!file_exists($complete_path)) {

$tmp = '';

foreach(explode('\\',$complete_path) AS $k) {

$tmp .= $k.'\\';

if(!file_exists($tmp)) {

mkdir($tmp, 0777);

}

}

}

if (zip_entry_open($zip, $zip_entry, "r")) {

$fd = fopen($complete_name, 'w');

fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)));

fclose($fd);

zip_entry_close($zip_entry);

}

}

}

zip_close($zip);

}

}

To use this function:

unzip('c:\\file.zip','c:\\temp\\'); // BE CAREFULL: second argument *MUST* finish by a "\" ! ("/" under *nix)

Patrick

----------------------------------------------------------------------------------------

mas não tive sucesso, apesar de não mostrar qualquer erro...

mas um detalhe que eu vi, é que tem que especificar o caminho, o que não adianta o site esteja hospedado num provedor, pois você não vai saber o caminho.

O que seria necessário para fazer essa função rodando só na área do site?

Grato,

Xandão Grunge

Link para o comentário
Compartilhar em outros sites

  • 0

Essa biblioteca é a mesma de zziplib?

como posso saber se ela está instalada...

Eu uso o win XP, IIS 5, PHP 4.3.4-win32

e dentro da pasta PHP\extensions tem um arquivo php_zip.dll ... isso quer dizer que contém esta biblioteca ou não?

Grato,

Xandão Grunge cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

é rapaz fui lá e não encntrei esta linha mas encontrei esta daqui:

;extension=php_zlib.dll

tentei desabilita-la e ele disse que não existia, o que de fato é verdade... mas dai eu criei logo abaixo esta linha com este nome de arquivo que encontrei:

extension=php_zip.dll

será que é esta mesmo a biblioteca ou não? caso eu precise ter o php_zlib.dll onde posso puxar... eu tentei puxar no php.net mas não consegui achar nada... pode ser eu não soube fazer esta busca...

e essas bibliotecas tem a mesma relação com a zziplib?

teria eu que adicinar mais alguma linha

Grato, Xandão Grunge cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

404error eu puxei a biblioteca em um zlib121-dll.zip dai onde eu extraio ele?

dentro da pasta php?

eu deixo a pasta zlib121-dll com todos seus arquivos ai dentro do php, ou deixo os arquivos na raiz?

Agradeço a atenção,

Xandão Grunge cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

C:\php\extensions\

------------------------------------------------------------------------

eu baixei este daki, tá certo?

zlib source code, version 1.2.1, tar.gz format (338k, MD5 checksum ef1cb003448b4a53517b8f25adb12452):

France (www.gzip.org) < http://www.gzip.org/zlib/zlib-1.2.1.tar.gz >

------------------------------------------------------------------------

Tente usar o recurso "Editar post" próxima vez !! Isso deixa o fórum sem posts desnecessários !!
Link para o comentário
Compartilhar em outros sites

  • 0

é tá dando trabalho isso aqui heim...

coloquei o arquivo zlib1.dll que o 404error me disse dentro de C:\PHP\extensions\

convforme o BEOC me disse.

dai eu adicionei esta linha no php.ini:

extension=zlib1.dll

mas dá um erro dizendo que a biblioteca é inexistente...

e não vejo nada falando sobre como instalar

Grato,

Xandão Grunge cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

APENAS ALGUMAS MODIFICAÇÕES NECESSÁRIAS PARA O CODIGO FUNCIONAR CORRETAMENTE.

function unzip($file, $path) {
        chdir($path);
        $path = getcwd().'/';
        $zip = zip_open($path.$file);
        if ($zip) {
            while ($zip_entry = zip_read($zip)) {
                if (zip_entry_filesize($zip_entry) > 0) {
                    // str_replace must be used under windows to convert "/" into "\"
                    $complete_path = $path.str_replace('/','\\',dirname(zip_entry_name($zip_entry)));
                    $complete_name = $path.str_replace ('/','\\',zip_entry_name($zip_entry));
                    if(!file_exists($complete_path)) {
                        $tmp = '';
                        foreach(explode('\\',$complete_path) AS $k) {
                            $tmp .= $k.'\\';
                            if(!file_exists($tmp)) {
                                mkdir($tmp, 0777);
                            }
                        }
                    }
                    if (zip_entry_open($zip, $zip_entry, "r")) {
                        $fd = fopen($complete_name, 'w');
                        fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)));
                        fclose($fd);
                        zip_entry_close($zip_entry);
                    }
                }
            }
            zip_close($zip);
            return true;
        }else{
            return false;
        }
    }

==========================================

Bruno Angos

Desenvolvimento Web

+55 51 8188.1977

MSN: brunoangos@hotmail.com

skype: brunoangos

www.brunoangos.com

==========================================

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...