Função para Obter o Tamanho de um Diretório
Esta função aceita o caminho de um diretório e calcula recursivamente o tamanho total de todos os arquivos contidos nele.
<?php
function obterTamanhoDiretorio($caminhoDiretorio) {
$tamanhoAcumulado = 0;
$manipulador = opendir($caminhoDiretorio);
if ($manipulador) {
while (($elemento = readdir($manipulador)) !== false) {
if ($elemento === '.' || $elemento === '..') {
continue;
}
$caminhoElemento = $caminhoDiretorio . '/' . $elemento;
if (is_dir($caminhoElemento)) {
$tamanhoAcumulado += obterTamanhoDiretorio($caminhoElemento);
} else {
$tamanhoAcumulado += filesize($caminhoElemento);
}
}
closedir($manipulador);
}
return $tamanhoAcumulado;
}
Função para Copiar um Diretório
Esta função requer dois caminhos: o diretório de origem e o diretório de destino. Ela copia recursivamente todos os arquivos e subdiretórios.
<?php
function copiarDiretorioRecursivo($origem, $destino) {
if (!is_dir($origem)) {
echo "Origem não é um diretório válido.";
return false;
}
if (!is_dir($destino)) {
mkdir($destino, 0755, true);
}
$manipuladorOrigem = opendir($origem);
if ($manipuladorOrigem) {
while (($item = readdir($manipuladorOrigem)) !== false) {
if ($item === '.' || $item === '..') {
continue;
}
$caminhoOrigemItem = $origem . '/' . $item;
$caminhoDestinoItem = $destino . '/' . $item;
if (is_dir($caminhoOrigemItem)) {
copiarDiretorioRecursivo($caminhoOrigemItem, $caminhoDestinoItem);
} else {
copy($caminhoOrigemItem, $caminhoDestinoItem);
}
}
closedir($manipuladorOrigem);
return true;
}
return false;
}
Função para Remover um Diretório com Conteúdo
Esta função recebe o caminho de um diretório e exclui recursivamente todos os arquivos e subdiretórios, removendo o diretório raiz no final.
<?php
function removerDiretorioCompleto($caminhoDiretorio) {
if (!is_dir($caminhoDiretorio)) {
return false;
}
$manipulador = opendir($caminhoDiretorio);
if ($manipulador) {
while (($arquivo = readdir($manipulador)) !== false) {
if ($arquivo === '.' || $arquivo === '..') {
continue;
}
$caminhoArquivo = $caminhoDiretorio . '/' . $arquivo;
if (is_dir($caminhoArquivo)) {
removerDiretorioCompleto($caminhoArquivo);
} else {
unlink($caminhoArquivo);
}
}
closedir($manipulador);
rmdir($caminhoDiretorio);
return true;
}
return false;
}