Hey Leute,

habe mal eine Klasse (getstet unter php5) geschrieben, die auf Wunsch alle Verzeichnisse (inkl. Unterverzeichnisse) auflistet, mit der jeweiligen Größe der Dateien in diesem Verzeichniss.

Hier die Klasse: DirectoryIndex.class.php
PHP-Code:
<?php
class DirectoryIndex {
    
    private 
$links;
    private 
$a_links 0;
    
    
    public function 
DirectoryIndex() {    }
    
    
/**
    * @param string $dir Angabe des Verzeichnisses
    * @return int gesamte Größe der Dateien im Ordner ($dir)
    */
    
public function getSizeOfFiles$dir './' ) {
        
$endsize    0;
        
        
$file        $this->getFiles$dir );
        
        for(
$a=0$a count($file); $a++) {
            
$endsize += filesize$file[$a] );
        } 
        
        return 
$endsize;
    }
    
    
/**
    * @param string $dir Angabe des Verzeichnisses
    * @return Array mit allen Pfaden zu den jeweiligen Verzeichnissen
    */
    
public function getAllDirTree$dir './' ) {
        if(
$this->a_links != 0) { // Alle Elemente von $links löschen ...
            
for($a 0$a $this->a_links$a++ ) {
                unset( 
$this->links$a ] );
            }
        }
        
$this->a_links 0;
        
$this->createAllDirTree$dir );
        
sort($this->links);
        return 
$this->links;
    }
    
    
/**
    * @param string $dir Angabe des Verzeichnisses (Ergebnis wird in $links (Array) gespeichert)
    */
    
private function createAllDirTree$dir './' ) {
        
$new_ar     $this->getDirectories$dir );
            
        for(
$a=0$a<count($new_ar); $a++) {
            
$this->createAllDirTree($new_ar[$a]);
            
$this->links$this->a_links ] = $new_ar[$a];
            
$this->a_links++;
        }
    }
    
    
/**
    * @param string $dir Angabe des Verzeichnisses
    * @return 2 dimensionales Array (['DIR'] - Ordner, ['FILES'] - Dateien)
    */
    
public function getSingleTree$dir './' ) {
        
        
// Ordner auslesen
        
$myDirectories $this->getDirectories$dir );
        for( 
$y 0$y count$myDirectories ); $y++ ) {
            
$mySingleTree['DIR'][ $y ]        = $myDirectories$y ];
        }
        
        
// Dateien auslesen
        
$myFiles $this->getFiles$dir );
        for( 
$z 0$z count$myFiles ); $z++ ) {
            
$mySingleTree['FILE'][ $z ]        = $myFiles$z ];
        }
        
        return 
$mySingleTree;
    }
    
    
/**
    * @param string $dir Angabe des Verzeichnisses
    * @return Array mit den Pfäden zu den Dateien
    */
    
public function getFiles$dir './') {
        return 
$this->getContent($dir'FILE');    
    }
    
    
/**
    * @param string $dir Angabe des Verzeichnisses
    * @return Array mit den Pfäden zu den Ordner
    */
    
public function getDirectories$dir './') {
        return 
$this->getContent($dir'DIR');
    }
    
    
/**
    * @param string $dir Angabe des Verzeichnisses
    * @param string $which (Welche Art des Inhalts Data (FILE) oder Ordner (DIR)
    * @return Array mit dem Inhalt zu dem jeweiligen gesuchten Typen
    */
    
private    function getContent($dir './'$which 'FILE' ) {
        
$myArray = Array();
        
$a    0;
        
$handle opendir$dir );
                while (
$data readdir ($handle)) {
                    if(
$data != "." && $data != "..") {
                        
$url    str_replace('//','/'$dir '/' $data);
                        if( 
$which == 'FILE' && is_file$url ) ) {
                            
$myArray$a ] = $url;
                            
$a++;
                        } elseif ( 
$which == 'DIR' && is_dir$url ) ) {
                            
$myArray$a ] = $url;
                            
$a++;
                        }
                    }
                }
        
closedir($handle);    

        return 
$myArray;    
    }
    
}
?>
Hier ein Beispiel Script: test.php
(Listet jedes Verzeichnis auf - und die Größe der Dateien in diesem Verzeichnis)
PHP-Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <title>Webspace</title>
</head>

<body>
<table style="border:1px solid black;">
<tr><td style="border:1px solid black;">Pfad</td><td style="border:1px solid black;">Größe (in MB)</td></tr>
<tr><td></td><td></td></tr>
<?php
require_once ('DirectoryIndex.class.php');
$root    './';
$index    = new DirectoryIndex$root );
$dir    $index->getAllDirTree();

$totalsize    0;
for(
$a=0;$a<count($dir);$a++) {
    
$size    round$index->getSizeOfFiles($dir[$a]) / (1024*1024) );
    
$totalsize += $size;
    
    if( 
$a != ) {
        
$dynstyle    'style="background-color:#E0E0E0;"';
    } else { 
$dynstyle ''; }
    
    if( 
$size == ) {
        
$size '< 1';
    }
    
    echo 
'<tr><td '$dynstyle .'>'$dir[$a] . '</td><td '$dynstyle .'>' $size '</td></tr>';
}

if( 
$totalsize == 0) {
    
$totalsize '< 1';
}
?>
<tr><td></td><td style="border-top: 2px dashed black;"><b><?php echo $totalsize?></b></td></tr>
</table>
</body>
</html>
Die Doku dazu: DirectoryIndex

Habe das Skript aus folgendem Grund geschrieben, da in meinem ACP wird nur der Gesamtspeicherplatzverbrauch anzeigt. Wollte aber jedoch es etwas detaillierter haben und wissen wo bzw. was der Größteteil verschluckt.

Sollte eigentlich funktionieren.

(Vorausetzung: php5)

Viel Spaß damit!


Mit freundlichen Grüßen

nebler