Ir para conteúdo
Fórum Script Brasil
  • 0

Apagar Pasta


setokaiba

Pergunta

24 respostass a esta questão

Posts Recomendados

  • 0

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. smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

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!

Link para o comentário
Compartilhar em outros sites

  • 0

Eu montei essa função... não-recursiva! smile.gif

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. biggrin.gif

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...

Link para o comentário
Compartilhar em outros sites

  • 0

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..

biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

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... smile.gif

Aham, eu já fiz testes entre funções "normais" e as recursivas... as recursivas perdem feio... mas feio mesmo. biggrin.gif 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... smile.gif

Ufa... desembestei a falar... hehehe.

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Bom eu estou aqui de novo

fiz 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ão

porem tem um problema o codigo da um monte de bug depois que a pasta é apaga

vou 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] 
Link para o comentário
Compartilhar em outros sites

  • 0

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. smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

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!

Link para o comentário
Compartilhar em outros sites

  • 0

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!!! biggrin.gif

descupa se não era isso que você estava tentando me falar biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0
acho que é isso!!! biggrin.gif

descupa se não era isso que você estava tentando me falar biggrin.gif

Que isso, cara! Imagina... não se desculpe por isso, não.

Mas era isso que eu queria falar, sim... hehehe biggrin.gif

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()...

Link para o comentário
Compartilhar em outros sites

  • 0

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);
}

?>

Link para o comentário
Compartilhar em outros sites

  • 0
no caso esses is_dir() e is_file() são responsavel se exitem o diretorio ou arquivo solicitado rolleyes.gif

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."/".$arq

Elas retornam true se encontrar o arquivo ou diretório, e false se não encontrar.

Link para o comentário
Compartilhar em outros sites

  • 0

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);
   }
}







Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...