Script-Abwandlung (PHP) um 2 Verzeichnisgrößen auszulesen ?

FRitter

Erfahrenes Mitglied
Hallo zusammen,

ich setze ein PHP-Script ein, um die Ordnergröße inkl. Subdirectory + Files zu ermitteln. Dieses Script funktioniert in Punkto Genauhigkeit des Ergebnisses sowie Geschwindigkeit bzw. Ressourcen insg. sehr gut - ABER: Es muss nun möglich sein, das Script in einer PHP-Datei zu includen, so dass 2 Verzeichnisse separat behandelt werden können. Bislang gibt es nur viele Fehler, wenn ich versuche die Variablen ein 2. mal unter anderem Namen zu definieren und das Auslesen dann mit der "alten" Funktion benutze. Es wäre gut, wenn das untere Script vom Aufbau beibehalten werden könnte, da es wie oben beschrieben gute Ergebnisse liefert, allerdings nur für max. 1 Verzeichnis...

Schonmal danke für die Mühe!

Script das included wird sieht folgendermaßen aus(nach dem Includen liefert die Variable "$MemberFolderSize" alles zurück):

Code:
<?php

// error_reporting (0);

$base_dir = '../../Verzeichnis_xyz;
$subdir = '';
$index = '';
$HiddenFiles = array('');
$OnlyTheseExtensions = array();
$HideTheseExtensions = array();
$pathNav = 1;
$antiLeech = 0;
$folders_first = 1;
$show_extension = 1;
$showTotalCount = 0;
$showFolderCount = 0;
$showDirSize = 1;
$posix = (stristr(php_uname(),'win')) ? 0 : 1;
function is_in_array($str, $array) { 
return preg_grep('/^' . preg_quote($str, '/') . '$/i', $array);
}
if($base_dir[strlen($base_dir)-1]!='/') $base_dir.='/';
$dir = $base_dir.$subdir;
$totalBytes = 0;
function get_filesize($size) {
if($size <= 0) return '0 Bytes';
$u = array('Bytes', 'KB', 'MB', 'GB', 'TB', 'PB');
for($i=5; $i>=0; $i--) {
$s=number_format($size/pow(1024, $i), 1);
if($s >= 1) return "$s $u[$i]";
}
return '<1 Bytes';
}
function good_ext($file) {
global $HideTheseExtensions, $OnlyTheseExtensions;
(!strstr(substr($file, 1), '.')) ? $ext = '' : $ext = strtolower(substr(strrchr($file, '.'),1));
if(is_in_array($ext, $HideTheseExtensions)) return 0;
if(count($OnlyTheseExtensions) > 0 && !is_in_array($ext, $OnlyTheseExtensions)) return 0;
return 1;
}
function GetFileList($path) {
global $HiddenFiles, $sortMode, $posix;
$hndl = opendir($path);
while(($file=readdir($hndl)) !== false) {
if(!$posix && is_in_array($file, $HiddenFiles)) continue;
if(!in_array($file, $HiddenFiles) && $file[0]!='.') {
if(is_file("$path/$file") && good_ext($file)) $f[]=$file;
elseif(is_dir("$path/$file")) $d[]=$file;
}
}
closedir($hndl);
@sort($d);
@sort($f);
$a=array_merge($d, $f);
if($sortMode == 'd') $a = array_reverse($a);
return $a;
}
function dir_size($dir) {
$totalsize = 0;
foreach(GetFileList($dir) as $filename) {
if(is_dir("$dir/$filename")) $totalsize += dir_size("$dir/$filename");
else $totalsize += filesize("$dir/$filename");
}
return $totalsize;
}
$file_array=GetFileList($dir);
foreach($file_array as $key => $value) {
$npart=$dir.$value;
if(is_dir($npart)) {
if($showDirSize) {
$ds = dir_size($npart);
$totalBytes += $ds;
}
else echo htmlentities('<dir>')."<br />\n";
}
elseif(is_file($npart)) {
$totalBytes+=filesize($npart);
}
}

$MemberFolderSize = "0 MB";

$MemberFolderSize2 = $totalBytes/1024/1024;

if ($totalBytes < 1024) {
$MemberFolderSize = sprintf ("%.2f Bytes",$totalBytes);
$MemberFolderSize = str_replace(".",",",$MemberFolderSize);
}

if ($totalBytes >= 1024) {
$MemberFolderSize = $totalBytes/1024;
$MemberFolderSize = sprintf ("%.2f KB",$MemberFolderSize);
$MemberFolderSize = str_replace(".",",",$MemberFolderSize);
}

if ($totalBytes >= 1048576) {
$MemberFolderSize = $totalBytes/1024/1024;
$MemberFolderSize = sprintf ("%.2f MB",$MemberFolderSize);
$MemberFolderSize = str_replace(".",",",$MemberFolderSize);
}

if ($totalBytes >= 1073741824) {
$MemberFolderSize = $totalBytes/1024/1024/1024;
$MemberFolderSize = sprintf ("%.2f GB",$MemberFolderSize);
$MemberFolderSize = str_replace(".",",",$MemberFolderSize);
}

?>

(Ende)
 
Na ja, Funktionen kann man halt nur ein mal pro Seite deklarieren.
Also schreib die Funktionen in eine extra Datei und include diese nur ein mal am Anfang der Seite.
 
Hallo zurück,

erstmal danke für die schnelle Antwort!

Ich hatte leider nicht direkt an dem Problem weiterarbeiten können - habe jetzt sämtliche Funktionen 2 mal mit versch. Namen deklariert und kann jetzt mit gleichen Variablen die 2 Funktionen "ansteuern", das ganze ist etwas umfangreicher geworden - aber funktioniert jetzt separat einwandfrei!
 
Zurück