Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ckcesar

Problema ao zipar pasta e sub-pastas com PHP

Recommended Posts

Galera eu estou tentando zipar pasta e sub-pastas com vários arquivos, mais ele zipa certo, mais o problema é que ele pega direto da raiz alguém para me ajudar, eu tenho um post anterior sobre zip, mais é só pra zipar arquivos então é mais tranquilo, agora estou usando outra função do PHP.

Segue o código espero que vcs me ajudem e me mostrem meu erro.

Valeu.

$url = 'C:/APLICACOES/arquivos/pix_teste/baixar/users/0/7/ads/Ad1';
$zipfile = $url.'.zip';
$zip = new ZipArchive();
if ($zip->open($zipfile, ZipArchive::CREATE)!== TRUE) {
    exit("cannot open <$zipfile>\n");
}

$directory = new \RecursiveDirectoryIterator($url);
$iterator = new \RecursiveIteratorIterator($directory);
$files = array();
foreach ($iterator as $info) {
    if($info !== "." && $info !== ".."){
        $zip->addFromString($info,$info);
    }
}
$zip->close();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver o meu problema com o diretório, mais não consigo tirar os "." e ".." , no meu laço ele não se comporta, alguém para dar uma ideia?

$url = 'C:/APLICACOES/arquivos/pix_teste/baixar/users/0/7/ads/Ad1';
$zipfile = $url.'.zip';
$directory = new \RecursiveDirectoryIterator($url);
$iterator = new \RecursiveIteratorIterator($directory);

$zip = new ZipArchive();
if ($zip->open($zipfile, ZipArchive::CREATE)!== TRUE) {
    exit("cannot open <$zipfile>\n");
}
foreach ($iterator as $info) {
    $mostrar = str_replace("C:/APLICACOES/arquivos/pix_teste/baixar/users/0/7/ads/","",$info);
    echo $mostrar."<br/>";
    $zip->addFromString($mostrar,$mostrar);
}

$zip->close();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi absolutamente nada do seu problema. Se o está com problemas com os diretórios virtuais ("." e ".."). Use os métodos como isDir, isFile, etc..., da própria RecursiveDirectoryIterator.

Quais outros problemas seriam?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Gabriel Heming

O problema que estou tendo é que eu quero gerar o zip assim ' Ad1.zip com suas pastas'.

Mais ele zipa 'Ad1.zip e aqui dentro mostra desde a raiz C: e assim por diante'.

Usei str_replace e me ajudou mais estou usando o frame Yii2 e ela não deixa funcionar, sempre registra zipa a raiz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No primeiro parâmetro é o nome do arquivo. Como você usa RecursiveDirectoryIterator, não precisa fazer replace. Você terá um objeto SplFileInfo como arquivo, basta usar o método SplFileInfo::getFilename().

Outro problema, é que você está passando os mesmos parâmetros:

$zip->addFromString($mostrar,$mostrar);

O correto seria:

$zip->addFromString($nome_do_arquivo , $conteudo_do_arquivo);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.