Atualizado em 07 de Agosto de 2013

Navegando por Arquivos do ZIP com PHP

Olá pessoal,

Após ter postado dois posts sobre arquivos ZIP (compactar e descompactar) surgiram vários e-mails pedindo posts relacionados (por isso vou ir escrevendo aos poucos ;-]), um dos mais pedidos era de como Navegar pelos arquivos do ZIP, que nada mais e do que uma forma de ver quais arquivos tem em um arquivos ZIP.

O comando que vamos usar para a leitura do arquivo zip é o zip_read, que juntamente com o comando while vai nos possibilitar ver quais arquivos contém dentro do ZIP.

Vamos ver o exemplo:

<?php
$arquivo = zip_open('teste.zip');

  while($lista_arquivos = zip_read($arquivo))
  {
   echo 'Nome do Arquivo: '.zip_entry_name($lista_arquivos). '<br />';
  }

 zip_close($arquivo);
?>

Com este script podemos verificar se o arquivo que queremos realmente esta dentro do zip ou não.


"Esta dica te ajudou de alguma forma?" Então ajude outras pessoas compartilhando este conteúdo com seus amigos! =)


Até a próxima.

Tags:  Comandos PHP | PHP

Comentários

Sua foto do perfil

Rafael Campos

Mauricio, me tira uma duvida, preciso criar um álbum de fotos e já vi funcionando da seguinte forma:

tenho no ftp um arquivo zip com todas as fotos, preciso que o php leia o conteúdo do zip e exiba as imagens pra mim, porem ele não descompacta temporariamente os arquivos não.

Sabe me dizer como eu poderia fazer isso ?

27 de Agosto de 2015 - 17:45

Sua foto do perfil

Mauricio Programador

Olá Rafael,

Existem dois comando dessa classe que podem lhe ajudar são eles: getFromName que recebe como o nome do arquivo e getFromIndex que recebe o índice do arquivo no zip.

Com eles você pode carregar um arquivo direto do arquivo zip para uma uma variável do PHP sem extrair o arquivo.

Eu não tenho nenhum exemplo dele aqui de momento, mais vou criar um post na segunda próxima para você sobre isso com o exemplo funcionado.

Abraço.

28 de Agosto de 2015 - 10:43

Sua foto do perfil

Bonfim Jr

Olá Mauricio

Testou com um problema, o caminho de meu arquivo zip para por um variavel
ex: $arquivo = zip_open("musicas/$row_show['id_show']/cdshow.zip");

ai não completa o script. O que faço?

CODIGO COMPLETO:

<?php require_once('Connections/musicnotstop.php'); ?>
<?php
$colname_Recordset1 = "-1";
if (isset($_GET['id_show'])) {
$colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['id_show'] : addslashes($_GET['id_show']);
}
mysql_select_db($database_musicnotstop, $musicnotstop);
$query_Recordset1 = sprintf("SELECT * FROM shows WHERE id_show = %s", $colname_Recordset1);
$Recordset1 = mysql_query($query_Recordset1, $musicnotstop) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

$arquivo = zip_open("musicas/$row_show['id_show']/cdshow.zip");

while($lista_arquivos = zip_read($arquivo))
{
echo 'Nome do Arquivo: '.zip_entry_name($lista_arquivos). '<br />';
}

zip_close($arquivo);
?>
<?php
mysql_free_result($Recordset1);
?>

31 de Dezembro de 2013 - 19:56

Sua foto do perfil

Mauricio Programador

Olá Bonfim,

tente assim:

$arquivo = zip_open('musicas/'.$row_show['id_show'].'/cdshow.zip');

irá funcionar.

Grande abraço.

02 de Janeiro de 2014 - 09:44

Sua foto do perfil

Bonfim Junior

Bom Tarde Mauricio.
estou com um erro na linda 17, onde eu errei?
http://rntvsat.com.br/recbook/tamanho.php?id_show=2

echo '<a href="javascript:;" onclick="jplayer_addTrack(false,'musicas/'.$row_Recordset1['id_show'].'. zip_entry_name($lista_arquivos).')">'. zip_entry_name($lista_arquivos). '</a>','<p/>';

CÓDIGO:
<?php require_once('Connections/musicnotstop.php'); ?>
<?php
$colname_Recordset1 = "-1";
if (isset($_GET['id_show'])) {
$colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['id_show'] : addslashes($_GET['id_show']);
}
mysql_select_db($database_musicnotstop, $musicnotstop);
$query_Recordset1 = sprintf("SELECT * FROM shows WHERE id_show = %s", $colname_Recordset1);
$Recordset1 = mysql_query($query_Recordset1, $musicnotstop) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

$arquivo = zip_open('musicas/zip/'.$row_Recordset1['titulo'].'.zip');

while($lista_arquivos = zip_read($arquivo))
{
echo '<a href="javascript:;" onclick="jplayer_addTrack(false,'musicas/'.$row_Recordset1['id_show'].'. zip_entry_name($lista_arquivos).')">'.zip_entry_name($lista_arquivos). '</a>','<p/>';
}

zip_close($arquivo);
?>
<?php
mysql_free_result($Recordset1);
?>

02 de Janeiro de 2014 - 15:48

Sua foto do perfil

Mauricio Programador

oi amigo,

olha e difícil falar sobre um código que não vejo por completo, pelo que eu pude perceber você esta fazendo as concatenações de forma errada.

teste assim:

while($lista_arquivos = zip_read($arquivo))
{
$var = 'musicas/'.$row_Recordset1['id_show'];
echo '<a href="javascript:;" onclick="jplayer_addTrack(false,' . $var.zip_entry_name($lista_arquivos) .')">' .zip_entry_name($lista_arquivos). '</a><p/>';
}

Não sei se vai dar certo pois não tenho como testar aqui, mas espero que ajude.


abraço.

02 de Janeiro de 2014 - 15:55

Sua foto do perfil

Junior

E se caso eu quisesse excluir a pasta .zip?

16 de Agosto de 2013 - 15:48

Sua foto do perfil

Mauricio Programador

Olá Junior,

se for um zip, você vai ter que usar um outro comando o unlink.

Ex.:
 unlink('NOME_ARQUIVO');

Por que na verdade um zip não seria uma pasta e sim um arquivo.

(qualquer dúvida posta aí)

Grande Abraço amigo.

16 de Agosto de 2013 - 15:53

Sua foto do perfil

Junior Bezerra

Caro Mauricio desculpe o abuso mais teria uma classe que fizesse isso com pastas .RAR?

20 de Agosto de 2013 - 19:10

Sua foto do perfil

Mauricio Programador

Olá Junior,

Para descompactar arquivos do tipo .rar basta instalar um pacote que esta neste link http://pecl.php.net/package/rar, e depois usar o código abaixo:

<?php

$rar_file = rar_open('NOME_ARQUIVO');

$entries = rar_list($rar_file);

foreach ($entries as $entry)
{
$entry->extract('/z_testando/');
}

rar_close($rar_file);

?>

O grande problema disso e que eu não conheço nenhum servidor de hospedagem que tenha este pacote instalado.

Por tanto se você não tiver como fazer esta instalação no seu servidor e bom rever a utilidade neste caso.

Espero ter ajudado.

Grande abraço.

20 de Agosto de 2013 - 19:14

NEWSLETTER

Receba dicas de programação
em seu e-mail

TWITTER

Acompanhe tudo o que rola
com Mauricio Programador

NEWSLETTER