Jump to content
Fórum Script Brasil
  • 0

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


Beraldo
 Share

Question

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: [email protected]
*
*  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: [email protected]
*
*  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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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: [email protected]
*
*
*/

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

Edited by Duh Dias
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649.1k
×
×
  • Create New...