setokaiba Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 Ai galera estou com um problema e um dilema como fazer para apagar uma pasta e tudo que esta dentro dela??uma pasta com fotos???? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Error404 Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 Bom... não existe uma função erasedirandallthefilesinside(), mas várias pessoas já fizeram isso, algumas inclusive, utilizando funçõe recursivas.O jeito é você montar um algortimo que liste todos os arquivos/sub-diretórios dentro do diretório que você quer apagar e vá deletando 1 por 1 até acabar; aí você deleta o diretório que queria. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fabyo Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 (editado) monta um loop e use a função unlink()e se pode usar também a funções readdir, globOpa Error não vi você postar Editado Novembro 25, 2004 por fabyo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 setokaiba Postado Novembro 25, 2004 Autor Denunciar Share Postado Novembro 25, 2004 então no caso não existe uma função que apague a pasta sub pasta e aquivos nesse caso terei que criar uma function especifica para isso apagando um por um correto. beleza a hora que tiver pronto post ai pra galera ver Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fabyo Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 (editado) $pasta = "teste";//pasta que ira apagar$open = opendir($pasta);while($arq = readdir($open)){if($arq == "." or $arq=="..") continue;unlink("$pasta/$arq");}closedir($open);rmdir($pasta); Editado Novembro 25, 2004 por fabyo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 Fabyo, dessa forma apagaria apenas os arquivos, né? As pastas teriam que ser apagadas com o rmdir()... MAS isso se não houver arquivos dentro delas... hehehe. Vai complicando... Não seria difícil montar uma recursiva que fizesse isso... vou ver se consigo montar um esquema desses sem utilizar a recursividade.Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Error404 Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 Nesse caso usar a recursiva seria uma boa: economia de código... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fabyo Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 só colocar no final rmdir($pasta); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Error404 Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 Acho que montar uma função dessas seria um belo exercício pra sua lógica de programação, setokaiba.Eu não usaria o código que o fabyo passou, eu tentaria fazer um! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 Eu montei essa função... não-recursiva! E não tem muitas linhas a mais que a recursiva. Sem contar no tempo de execução. Esta minha é muito mais rápida que uma recursiva. Bom, eu ia postar na parte de scripts... mas já que ele pode querer criar uma própria (como o Error sugeriu), vou dar um tempo pra postar lá.Até mais!PS: Fabyo, colocando um rmdir($pasta) removeria o diretório SE não tiver arquivos ou pastas dentro... entendeu? É um pouco mais complicado que isso... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Error404 Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 Chegou a comparar o tempo com uma recursiva?Porque pode ser que seja microptimization, porque a recursiva tem bem menos código pra ser lido e acaba sendo mais eficiente.É aquele velho debate OOPxProcedural... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 setokaiba Postado Novembro 25, 2004 Autor Denunciar Share Postado Novembro 25, 2004 Ai galera os post de vocês estão sendo muito uteis vou tentar fazer minha propria function acho que o erro404 esta certo seria um bom exercicios para min seria bem contrutivo pra min que estou começado a hora que eu tiver alguma duvida sobre algum comando o function post ai pra vocês.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Novembro 25, 2004 Denunciar Share Postado Novembro 25, 2004 Chegou a comparar o tempo com uma recursiva?Porque pode ser que seja microptimization, porque a recursiva tem bem menos código pra ser lido e acaba sendo mais eficiente.É aquele velho debate OOPxProcedural... Aham, eu já fiz testes entre funções "normais" e as recursivas... as recursivas perdem feio... mas feio mesmo. Pois ela vai chamando a mesma função dentro dela mesma, e isso vai comendo uma memória enorme. Pense assim: a última função que ele vai terminar de processar é exatamente a primeira que foi aberta, pois a primeira foi abrindo um monte de funções iguais a ela, e depois elas foram retornando um valor até voltar no processamento da primeira. Tudo isso, como eu disse, atraza o processamento de forma que, em muitos casos, fica visível para o usuário. Ou pior ainda: nem consegue terminar de processar o script.Eu só vejo um motivo pra utilizar uma função recursiva: simplicidade do código (que muitas vezes nem fica tão simples assim). E quanto ao debate O.O. X Procedural, o código com objetos é um pouco mais lento, realmente. Mas eu programo com Orientação a Objetos e nunca notei uma diferença no tempo de processamento. Tirando todas as vantagens de utilizar O.O., como reutilização das classes, encapsulamento do código, entre outros... Ufa... desembestei a falar... hehehe.Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 setokaiba Postado Novembro 26, 2004 Autor Denunciar Share Postado Novembro 26, 2004 Bom eu estou aqui de novofiz uns teste la em casa com os codigo que o fabyo mandou$pasta = "teste";//pasta que ira apagar$open = opendir($pasta);while($arq = readdir($open)){if($arq == "." or $arq=="..") continue;unlink("$pasta/$arq");}closedir($open);rmdir($pasta); e fiz um outro que aparentimente pelos os teste que eu fiz ele apaga toda a pasta e subpasta e arquivos não importando a quantidade de pasta e arquivo que nela contenhãoporem tem um problema o codigo da um monte de bug depois que a pasta é apagavou mandar o script pra ver como resouver isso!!function apagar($pasta){$open = opendir($pasta);chmod($pasta, 0777);while($arq = readdir($open)){if($arq == "." or $arq=="..") continue;apagar($pasta."/".$arq);}unlink("$pasta/$arq");closedir($open);rmdir($pasta); }isso acima funciona apaga tudo mais da uns bug que não se resouver[edit=Error404] pra deixar o código colorido, coloque-o dentro de e não de ... [/edit] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Novembro 26, 2004 Denunciar Share Postado Novembro 26, 2004 Tá dando pau porque você está chamando a função recursiva sem fazer qualquer verificação. Veja que ele vai chamar essa mesma função pra CADA ARQUIVO LIDO, certo? Mas essa função não é pra apagar ARQUIVOS (repare no parâmetro que você passa na função: diretório). Sacou?Vai lá... você tá no caminho. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 setokaiba Postado Novembro 26, 2004 Autor Denunciar Share Postado Novembro 26, 2004 essa function apaga arquivos e pasta de um diretori ela funciona mais da um bug de algo como open falid ou mrdir falid algo desse tipocomo resover isso!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Novembro 26, 2004 Denunciar Share Postado Novembro 26, 2004 Pensa um pouco no que eu falei, cara...você criou uma função pra apagar tudo, arquivos e diretórios. Qual é o parâmetro que você passa pra essa função? Um diretório raiz, certo? Então, quando você voltar a chamá-la dentro dela mesma, o parâmetro que você vai passar pra ela tem que ser outro "diretório raiz" (que seria um subdiretório do que foi passado na primeira função).Falou! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 setokaiba Postado Novembro 26, 2004 Autor Denunciar Share Postado Novembro 26, 2004 tipo to meio devagar no que você disse mais pelo que entendi acho que devo fazer uma verificação do diretorio antes que a function execute o que esta dentro dela começar.acho que é isso!!! descupa se não era isso que você estava tentando me falar Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Novembro 26, 2004 Denunciar Share Postado Novembro 26, 2004 acho que é isso!!! descupa se não era isso que você estava tentando me falar Que isso, cara! Imagina... não se desculpe por isso, não.Mas era isso que eu queria falar, sim... hehehe você tá chamando essa função pra cada arquivo que é lido dentro do diretório, sendo que essa função serve pra apagar uma pasta. Verifique se é pasta... se for, chame a função novamente. Se não for, mande apagar com o unlink()... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 setokaiba Postado Novembro 26, 2004 Autor Denunciar Share Postado Novembro 26, 2004 então já que é isso qual function que se usa pra verificar se é uma pasta ou um arquivo???????????? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 hara Postado Novembro 26, 2004 Denunciar Share Postado Novembro 26, 2004 Não venho acompanhando o tópico, mas tem uma função que apaga todo o conteudo de um diretório, desde arquivos e subpastas ! <?php /** * Delete a file, or a folder and its contents * * @author Aidan Lister <aidan@php.net> * @version 1.0.1 * @param string $dirname Directory to delete * @return bool Returns TRUE on success, FALSE on failure */ function rmdirr($dirname) { // Sanity check if (!file_exists($dirname)) { return false; } // Simple delete for a file if (is_file($dirname)) { return unlink($dirname); } // Loop through the folder $dir = dir($dirname); while (false !== $entry = $dir->read()) { // Skip pointers if ($entry == '.' || $entry == '..') { continue; } // Deep delete directories if (is_dir("$dirname/$entry")) { rmdirr("$dirname/$entry"); } else { unlink("$dirname/$entry"); } } // Clean up $dir->close(); return rmdir($dirname); } ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Novembro 26, 2004 Denunciar Share Postado Novembro 26, 2004 Como você já poderia imaginar:is_dir()is_file() Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 setokaiba Postado Novembro 26, 2004 Autor Denunciar Share Postado Novembro 26, 2004 no caso esses is_dir() e is_file() são responsavel se exitem o diretorio ou arquivo solicitado vou ver o que posso fazer aqui já post jaja Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Novembro 26, 2004 Denunciar Share Postado Novembro 26, 2004 no caso esses is_dir() e is_file() são responsavel se exitem o diretorio ou arquivo solicitado vou ver o que posso fazer aqui já post jaja isso! E não se esqueça de passar o caminho completo... no seu caso: $pasta."/".$arqElas retornam true se encontrar o arquivo ou diretório, e false se não encontrar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 setokaiba Postado Novembro 26, 2004 Autor Denunciar Share Postado Novembro 26, 2004 Eu tenho isso mais não sei se vai funcionar pois não tenho servidor aqui pra ver so em casa mais acho que vocês podem dizer se vai funcionar ou não.. function apagar($pasta) { chmod($file,0777); if (is_dir($pasta)) { $open = opendir($pasta); while($arq= readdir($open)) { if ($arq != "." or $arq != "..") { apagar($pasta."/".$arq); } } closedir($open); rmdir($pasta); } else { unlink($pasta); } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
setokaiba
Ai galera estou com um problema e um dilema como fazer para apagar uma pasta e tudo que esta dentro dela??
uma pasta com fotos????
Link para o comentário
Compartilhar em outros sites
24 respostass a esta questão
Posts Recomendados
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.