+2

Como posso calcular estatísticas (espaço sendo usado/disponível) para um diretório?

criado por Cleiton Becker em 31/05/2009 5:33pm
Pessoal,

Preciso pegar quanto de espaço em disco está disponivel para um determinado diretório e o que está sendo utilizando, para apresentar na tela de um admin.

Se alguem puder me ajudar.

Obrigado.

Lista de Respostas:

+3
02/06/2009 1:02am
(~15 anos atrás)
Alex Weber respondeu:
Caso não tenha conhecimento da SPL fica complicado explicar mas enfim:

$iterador = new RecursiveDirectoryIterator($pathName);
$iteradorRecursivo = new RecursiveIteratorIterator($iterador);
$tamanho = 0;
foreach ( $iteradorRecursivo as $arquivo ) {
    $tamanho += $arquivo->getSize();
}
echo 'tamanho = ' . $tamanho . ' bytes';
// SplFileinfo::getSize() retorna o número de bytes

Para converter para um número legível algúem publicou uma função legal na documentação:

function decodeSize( $bytes )
{
    $types = array( 'B', 'KB', 'MB', 'GB', 'TB' );
    for( $i = 0; $bytes >= 1024 && $i < ( count( $types ) -1 ); $bytes /= 1024, $i++ );
    return( round( $bytes, 2 ) . " " . $types[$i] );
}

// ou seja, echo 'tamanho é ' . decodeSize($tamanho);

Já para pegar quanto espaço de disco está livre é mais fácil:

echo 'espaco livre = ' . decodeSize(disk_free_space($disco));
// OBS: $disco: no windows vc colocaria 'C:', etc dependendo da particao que queira verificar, no linux '/' ou o caminho desejado
// OBS2: olha a funcao decodeSize() denovo!

E já que estamos falando disto... para saber o espaço total no disco:

echo 'espaco total = ' . decodeSize(disk_total_space($disco));

Espero que era isto que vc queria!

Abs,

Alex

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)