Funções Personalizadas em PHP para Operações com Diretórios

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

Tags: PHP diretórios recursividade funções personalizadas manipulação de arquivos

Publicado em 6-25 16:46