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
Hier ein Beispiel Script: test.phpPHP-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;
}
}
?>
(Listet jedes Verzeichnis auf - und die Größe der Dateien in diesem Verzeichnis)
Die Doku dazu: DirectoryIndexPHP-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 % 2 != 0 ) {
$dynstyle = 'style="background-color:#E0E0E0;"';
} else { $dynstyle = ''; }
if( $size == 0 ) {
$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>
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


LinkBack URL
About LinkBacks
Zitieren
Lesezeichen