Не знаю насчет баз данных...
Вычисляет размеры (в частности) для заданной и всех вложенных (можно с маской)
Проверено.
<?php
class MY_DIR{
var $dir_size;
function MY_DIR($d){
$this->dir_size=0;
printf("<hr><b><u>DirName: %s </u></b><br>\n",realpath($d));
$s=$this->scan($d);
printf("<u>DirSize: %s</u><hr>\n",$this->dir_size);
echo $s;
}
//--
function scan($dirname){
GLOBAL $OBS;
$out_str='';
$dp=opendir($dirname);
while($file=readdir($dp)){//
//--Если директория--
if(is_dir($file)&&!eregi("\.",$file)){
$OBS[$file]=new MY_DIR($file);
}
elseif(!eregi("\.(txt)$",$file)){continue;}
else{
$fs=@filesize($file);
if(!is_numeric($fs)){$fs='<b><u>undefined</u></b>';}
else{$this->dir_size+=$fs;}
$out_str.=sprintf("FileName: %s; FileSize: %s<br>\n",$file,$fs);
}
}//End_while
return $out_str;
}//End_func
//--
}//End_class
//--Собственно, обработка начинается здесь----------------
$total_size=0;
$OBS=array();//Массив объектов-директорий
$dir_name='.';//Директория, с которой начинаем
$OBS[$dir_name]=new MY_DIR($dir_name);
foreach($OBS AS $ob){
$total_size+=$ob->dir_size;
}
printf("_______<u>TotalSize: %s</u>_______<hr>\n",$total_size);
?>
Результат:
<hr><b><u>DirName: y:\home\test.ru\www </u></b><br>
<hr><b><u>DirName: y:\home\test.ru\www\bg51x121 </u></b><br>
<u>DirSize: 0</u><hr>
<hr><b><u>DirName: y:\home\test.ru\www\cgi-bin </u></b><br>
<u>DirSize: 178</u><hr>
FileName: a.txt; FileSize: 113<br>
FileName: b.txt; FileSize: 65<br>
FileName: c.txt; FileSize: 0<br>
<hr><b><u>DirName: y:\home\test.ru\www\img </u></b><br>
<u>DirSize: 0</u><hr>
<u>DirSize: 178</u><hr>
FileName: a.txt; FileSize: 113<br>
FileName: b.txt; FileSize: 65<br>
FileName: c.txt; FileSize: 0<br>
_______<u>TotalSize: 356</u>_______<hr>