Ajuda - Busca - Membros - Calendário
Versão Completa: Extraindo arquivos com PHP
Fórum Script Brasil > Programação & Desenvolvimento > PHP
jefponte
Estou querendo criar um script para listar os arquivos de uma pasta e, ao lado dos arquivos zipados, uma opção para extrair.


Preciso de ajuda nessa primeira etapa de listagem.


Meu código está assim:

<?php
//pega o nome do diretório que terá seus arquivos listados.

$path = "../arnaldosocial/";

//abre o diretório

$diretorio = dir($path);

echo "<h4>Lista de Arquivos do diretório".$path."<br /></h4><br>";


while($arquivo = $diretorio -> read()){

//link para abrir o arquivo
echo '<h5><a href="'.$path.$arquivo.'">'.$arquivo.'</a></h5>';

//link para deletar o arquivo

echo ' || --> <a href="deletar.php?deletar='.$arquivo.'"> DELETAR </a><br />';

//link ao lado de todos os arquivos com extensão zip

//se o arquivo conter a palavra zip em seu nome, mostra o link de descompactar

if ($arquivo like '%zip%')
{
echo '<a href="descompactar.php?arquivonome='.$arquivo.'">Descompactar</a>';
}

//Se o arquivo não conter a palavra zip...

Else
{
echo 'Esse não é um arquivo arquivo zipado.';
}


//fecha o wile e fecha o diretório

}
$diretorio -> close();
?>


O meu problema está na linha onde if ($arquivo like '%zip%'). O like funciona em Mysql para fazer filtros, mas não funciona em php. EU já sabia disso. Queria saber o que é que eu uso nesse local aí para dizer: "Se o arquivo conter a palavra zip em seu nome...". Desde já agradeço.
JaguA
de um var_dump na variavel $arquivo e veja os campos que ele te retorna verifique qual é o responsavel pelA extensão do arquivo e compara se é .zip ou .rar assim nem precisa ser pelo nome já que o que você pretende é verifica arquivos compactados para descompactar.
jefponte
Jagua, já estou agradecido por você ter apontado a direção. Mas ainda continuo sem conseguir fazer funcionar, pois não sei como o var_dump funciona. Estou dando umas lidas no manual php. Eu agradeceria muito se você pudesse me explicar como isso funciona e como eu o adicionaria no meu código.
jefponte
Eu pensei que isso aqui iria funcionar, mas a variável $msg só está recuperando, no site, o valor "Esse é um arquivo zip". Para todos os arquivos, sejam formato zip ou não.



_____

$extensaodoarquivo=substr($arquivo, -3);
if ($extensaodoarquivo ="zip")
{
$msg = 'Esse é um arquivo zip';
}

else

{


$msg = "Esse não é um arquivo zip";

}





echo $msg;



________


fiote
Jagua, o erro dele não tem a ver com isso lol. Existe ($arquivo like '%zip%') em php? wtf.

Jef, mude essa linha:
CODE
if ($arquivo like '%zip%')


Para isso aqui:
CODE
if (strpos($arquivo,'.zip') > 0)







Ps: A solução que você encontrou sozinho também funciona, mas você esqueceu um detalhe. Ao escrever
CODE
if ($extensaodoarquivo ="zip")
você está basicamente dizendo "se for possível guardar o valor "zip" na variação $extensaodoarquivo, faça isso".

Você esqueceu (ou ainda não sabe) que precisa usar DOIS sinais de iguais na hora de fazer comparações. Um sinal de igual signica atribuição. Logo, você deveria fazer:
CODE
if ($extensaodoarquivo == "zip")
.
jefponte
fiote, muito obrigado!
Funcionou perfeitamente!
biggrin.gif


Fiote, valeu a informação. Eu achava que colocar dois sinais ou um sinal de igual era a mesma coisa. Pensava que o pessoal colocava dois por frescura. \o/
Valeu!!!
JaguA
Bem eu entendi que ele estava listando determiandos arquivos de uma pasta onde ele queria extrair os arquivos zipados...

então ao ler os arquivos eu poderiar verificar a extensão de cada um e depois extrair o que fosse Zip.

na vdd eu falei na questão do var_dump so para ver o qual a nomeclatura que deveria dar junto a variavel que armazenava o arquivo porque não lembrei de cabeça nada que pude-se auxilhar..

então dou um var_dump...
ele me retorna o array com todos os indices dos arquivos onde tem o nome, tamanho, extensão e etc.

então eu compararia somente a extensão se fosse = a ZIP mandava extrair... rsrs
jefponte
A parte de extrair eu vou fazer usando method Get para cada arquivo separadamente, de acordo com o que o usuário escolher extrair. Por isso eu queria que ele mostrasse em baixo somente uma coisa diferente no arquivo que fosse zip. Mas mesmo assim, obrigado, JagA. Foi bom saber sobre essa var_dump. To lendo aqui no manual, porque será útil em outras ocasiões. Bem.. O Problema foi Resolvido. Vou postar o código como ficou.


arquivo listaarquivos.php da pasta jefponte.

<?php
$path = "../jefponte/";
$diretorio = dir($path);
echo "<h4>Lista de Arquivos do diretório".$path."<br /></h4><br>";
while($arquivo = $diretorio -> read()){
echo '<h5><a href="'.$path.$arquivo.'">'.$arquivo.'</a> </h5> || --> <a href="deletar.php?deletar='.$arquivo.'"> DELETAR </a><br />';
if (strpos($arquivo,'.zip') > 0)

{
echo '<a href="descompactar.php?arquivonome='.$arquivo.'">Descompactar</a>';
}
else

{
echo '<br>';
}
}


$diretorio -> close();
?>


A descompactação é feita com o arquivo descompactar.php, onde o nome do arquivo é enviado com o metodo Get, através do link.



descompactar.php


<?php
$arquivonome = $_GET['arquivonome'];
$zip = new ZipArchive;
if ($zip->open($arquivonome) === TRUE) {
$zip->extractTo("../jefponte");
$zip->close();
echo 'Arquivo extraído com sucesso!<br>Estou redirecionando a página!';
echo '<META HTTP-EQUIV=Refresh CONTENT="3; URL=http://gcsufc.com.br/jefponte/listararquivos.php">';
} else {
echo "Oh não! Deu problema! E agora?";
echo '<br>Vou redirecionar para que você possa tentar denovo.<META HTTP-EQUIV=Refresh CONTENT="3; URL=http://gcsufc.com.br/jefponte/listararquivos.php">';
}
?>



Ficou legal! Agradeço a todos que me deram atenção.
biggrin.gif
biggrin.gif
biggrin.gif
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2013 Invision Power Services, Inc.