ckcesar 7 Denunciar post Postado Outubro 5, 2016 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
ckcesar 7 Denunciar post Postado Outubro 6, 2016 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
gabrielfalieri 15 Denunciar post Postado Outubro 6, 2016 Tenta com uma função chamada explode Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Outubro 6, 2016 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
ckcesar 7 Denunciar post Postado Outubro 6, 2016 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
Gabriel Heming 766 Denunciar post Postado Outubro 6, 2016 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