<?php // +---------------------------------------+ // | -> Pode fazer o que quiser com isso | // | | // | 12-02-2004 Silvano (gosh) | // +---------------------------------------+ set_time_limit(0); if (PHP_OS == "WIN32") { define(BARRA, "\\"); } else { define(BARRA, "/"); } class ArvoreDiretorios { function executa($diretorio) { $array_dados = ArvoreDiretorios::lerDiretorio($diretorio); ArvoreDiretorios::mostraArvore($array_dados, 0); } /** * Esta fun��o l� o diret�rio passado e pega o espa�o total * ocupado pelos arquivos e diret�rios, retornando tudo em um * array * * @author Silvano Girardi Jr. <sgj@dr.com> */ function lerDiretorio($nome) { $retorno = array(); if (is_dir($nome)) { $handle = @opendir($nome); if (!$handle) { return "N�o foi poss�vel abrir o diret�rio"; } $tamanho = 0; while($filename = readdir($handle)) { if ($filename != "." && $filename != "..") { $temp = ArvoreDiretorios::lerDiretorio($nome.BARRA.$filename); if (is_array($temp)) { if (!is_array($retorno[$nome])) { $retorno[$nome] = array(); } $retorno[$nome] = array_merge($retorno[$nome], $temp); } else { $tamanho += $temp; } } } closedir($handle); if (!is_array($retorno[$nome])) { $retorno[$nome] = array(); } array_push($retorno[$nome], number_format($tamanho, 2, ".", ",")); return $retorno; } else { return (filesize(getcwd().BARRA.$nome)/1024); } } /** * Esta fun��o � uma modifica��o da vers�o apresentada nos coment�rios * da fun��o dir() no site php.net/dir por 'de\kibo\niels' */ function mostraArvore ($array_dados, $profundidade) { foreach ($array_dados AS $nome => $tamanho) { if (is_array($tamanho)) { for ($i = 0; $i < $profundidade - 1; $i++) { echo "<i>| </i>"; } echo "<i>+-</i>"; echo "<b>".$nome." (".$array_dados[$nome][0]." Kb)</b>\n"; $profundidade++; ArvoreDiretorios::mostraArvore($tamanho, $profundidade); $profundidade--; } } } } echo " <style> b {font-weight: normal; color:black} i {font-style:normal; color:red} </style> <pre>"; # exemplo: ArvoreDiretorios::executa("."); ?>