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

Função Para Apagar Um Diretório E Todo O Seu Conteúdo


Beraldo

Pergunta

Script postado por: Illidan

Função para apagar um diretório e todo o seu conteúdo

Se você já tentou apagar uma pasta pelo PHP, viu como é um processo chato caso ela esteja cheia de arquivos e subpastas com mais arquivos dentro. É que o PHP só apaga um diretório se ele estiver completamente vazio. Então criei esta função em que você só informa uma pasta "raiz", e ela automaticamente exterminará todo o conteúdo que houver no diretório antes de apagá-lo... Vou postar duas funções que fazem isso (uma normal e a outra recursiva... tem pra todos os gostos :D o resutado final é o mesmo). :rolleyes:

Abraços!

Atenção!

Arquivos apagados pelo PHP não podem ser recuperados. Portanto, tenha muito cuidado ao utilizar esta função. Saiba bem o que está fazendo antes de colocar este script para executar. Não me responsabilizo por qualquer arquivo (inclusive as fotos do topless da Angélica) que você possa perder pelo mau uso desta função.

<?php

//Forma de utilizar a função

$dir = 'diretorio/que/sera/removido/';
removeTree($dir); // ou removeTreeRec($dir), dependendo da função que você copiar

?>
function removeTree($rootDir)
/**
*  Função para remover um diretório sem ter que apagar manualmente cada arquivo e pasta dentro dele
*
*  ATENÇÃO!
*
*  Muito cuidado ao utilizar esta função! Ela apagará todo o conteúdo dentro do diretório 
*  especificado sem pedir qualquer confirmação. Os arquivos não poderão ser recuperados.
*  Portanto, só utilize-a se tiver certeza de que deseja apagar o diretório.
*
*
*  Autor: Carlos Reche
*  E-mail: carlosreche@yahoo.com
*
*  Por favor, mantenha os créditos : )
*
*/
{
    if (!is_dir($rootDir))
    {
        return false;
    }

    if (!preg_match("/\\/$/", $rootDir))
    {
        $rootDir .= '/';
    }


    $stack = array($rootDir);

    while (count($stack) > 0)
    {
        $hasDir = false;
        $dir    = end($stack);
        $dh     = opendir($dir);

        while (($file = readdir($dh)) !== false)
        {
            if ($file == '.'  ||  $file == '..')
            {
                continue;
            }

            if (is_dir($dir . $file))
            {
                $hasDir = true;
                array_push($stack, $dir . $file . '/');
            }

            else if (is_file($dir . $file))
            {
                unlink($dir . $file);
            }
        }

        closedir($dh);

        if ($hasDir == false)
        {
            array_pop($stack);
            rmdir($dir);
        }
    }

    return true;
}

function removeTreeRec($rootDir)
/**
*  Função recursiva para remover um diretório sem ter que apagar manualmente cada arquivo e pasta dentro dele
*
*  ATENÇÃO!
*
*  Muito cuidado ao utilizar esta função! Ela apagará todo o conteúdo dentro do diretório 
*  especificado sem pedir qualquer confirmação. Os arquivos não poderão ser recuperados.
*  Portanto, só utilize-a se tiver certeza de que deseja apagar o diretório.
*
*
*  Autor: Carlos Reche
*  E-mail: carlosreche@yahoo.com
*
*  Por favor, mantenha os créditos : )
*
*/
{
    if (!is_dir($rootDir))
    {
        return false;
    }

    if (!preg_match("/\\/$/", $rootDir))
    {
        $rootDir .= '/';
    }


    $dh = opendir($rootDir);

    while (($file = readdir($dh)) !== false)
    {
        if ($file == '.'  ||  $file == '..')
        {
            continue;
        }


        if (is_dir($rootDir . $file))
        {
            removeTreeRec($rootDir . $file);
        }

        else if (is_file($rootDir . $file))
        {
            unlink($rootDir . $file);
        }
    }

    closedir($dh);

    rmdir($rootDir);

    return true;
}

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Favor verificar o código abaixo, esta contendo algum erro pois a exclusão não esta sendo efetuada.

<?php
include ('seguranca.php');
include ('../language/idioma.php');
$lang = $_GET["lang"];
$pasta = substr($_GET['pasta'],0,-5);
?>

<style type="text/css">
body,td,th {
    font-family: Lucida Sans Unicode;
    font-size: 12px;
    font-weight: bold;
}
</style>

<?php
$dir = 'paginas/$lang/$pasta/';
removeTree($dir); 
?>

<?php 
include("conecta.php");
function removeTree($rootDir)

/**
*  Função para remover um diretório sem ter que apagar manualmente cada arquivo e pasta dentro dele
*
*  ATENÇÃO!
*
*  Muito cuidado ao utilizar esta função! Ela apagará todo o conteúdo dentro do diretório
*  especificado sem pedir qualquer confirmação. Os arquivos não poderão ser recuperados.
*  Portanto, só utilize-a se tiver certeza de que deseja apagar o diretório.
*
*
*  Autor: Carlos Reche
*  E-mail: carlosreche@yahoo.com
*
*
*/

{
    if (!is_dir($rootDir))
    {
        return false;
    }

    if (!preg_match("/\\/$/", $rootDir))
    {
        $rootDir .= '/';
    }


    $stack = array($rootDir);

    while (count($stack) > 0)
    {
        $hasDir = false;
        $dir    = end($stack);
        $dh     = opendir($dir);

        while (($file = readdir($dh)) !== false)
        {
            if ($file == '.'  ||  $file == '..')
            {
                continue;
            }

            if (is_dir($dir . $file))
            {
                $hasDir = true;
                array_push($stack, $dir . $file . '/');
            }

            else if (is_file($dir . $file))
            {
                unlink($dir . $file);
            }
        }

        closedir($dh);

        if ($hasDir == false)
        {
            array_pop($stack);
            rmdir($dir);
        }
    }

    return true;
}

?>
E o arquivo que pega o código:
<?php
include ('seguranca.php');
include ('../language/idioma.php');
$lang = strtolower($_GET["lang"]);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style type="text/css">
<!--
body,td,th {
    font-family: Lucida Sans Unicode;
    font-size: 12px;
    font-weight: bold;
}
-->
</style></head>

<body>
  <p align="left"><a href="java script:history.go(-1)"><?php echo voltar; ?></a></p>
<br />
<?php echo visualizarthumb ?>
<form id="form1" name="form1" method="post" action="excluir2.php?lang=<?php echo $lang ?>">
  <table width="75%" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td width="6%"><?php echo pasta ?></td>
      <td width="94%"><label>
        <select name="pasta" id="pasta">
          <?php
        // vari&aacute;vel que define o diret&oacute;rio das imagens
        $dir = "paginas/$lang";
        // esse seria o "handler" do diret&oacute;rio
        $dh = opendir($dir);
        // loop que busca todos os arquivos at&eacute; que n&atilde;o encontre mais nada
        while (false !== ($entrada = readdir($dh))) {
        // verificando se o arquivo &eacute; .jpg
        if ($entrada=='.' || $entrada=='..')
        continue;
        echo "<option value='$entrada'>".$entrada."</option>";


}

?>
        </select>
      </label></td>
    </tr>
    <tr>
      <td colspan="2"><label>
        <input type="submit" name="Submit" value="<?php echo enviar; ?>"/>
      </label></td>
    </tr>
  </table>
</form>
</body>
</html>

Grato.

Editado por Duh Dias
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...