rekursiv ordnergröße ermitteln - problem in funktion
manfred
- php
0 manfred0 lulu0 Sven Rautenberg
guten abend,
irgendwie ist bei mir eindeutig der wurm drin..
ihn zu finden scheint mir schirr unmöglich..
wäre sehr dankbar wenn mir einer meinen denkfehler
erklären könnte:
folgende funktion soll rekursiv die größe eines ordners
ermitteln. dazu durchlaufe ich jeden ordner und des
files, deren größe ich in $c_index, speichern möchte.
doch geschieht dieses nicht.
beim aufruf der funktion mit "../personalFolders/manfred/" und 0
(für die startgröße) kommt 0 heraus. debug zeigt folgende aufrufe:
countUsersUsedBytes( ../personalFolders/manfred/ , 0 )
countUsersUsedBytes( ../personalFolders/manfred/manfred/ , 0 )
countUsersUsedBytes( ../personalFolders/manfred/manfred/myOne/ , 244167 )
---code---
function countUsersUsedBytes( $dir, $c_index )
{
$handle = opendir( $dir );
while( $file = readdir ( $handle ) )
{
if ( eregi( "^.{1,2}$", $file ) ) continue;
$f_file = $dir.$file;
if( is_dir( $f_file ) )
{
countUsersUsedBytes( $f_file."/", $c_index );
}
if( is_file( $f_file ) )
{
$c_index += filesize( $f_file );
}
}
closedir($handle);
return $c_index;
}
-------
besten dank
manfred m
habe es herausbekommen:
global $c_index;
heisst die lösung...
danke dennoch
Huhu manfred
habe es herausbekommen:
global $c_index;
heisst die lösung...
das ist nur eine der möglichen Lösungen.
Im allgemeinen sollte man auf globale Variablen so weit wie möglich verzichten, und meist (eigentlich immer) ist es möglich.
Wenn Du beim rekursiven Aufruf statt
countUsersUsedBytes( $f_file."/", $c_index );
dieses schreibst
$c_index += countUsersUsedBytes( $f_file."/", $c_index );
sollte es auch funktionieren.
Viele Grüße
lulu
Moin!
habe es herausbekommen:
global $c_index;
heisst die lösung...
NEIN! Igitt! Mach das bloß nicht!
Aus Funktionen heraus auf globale Variablen zuzugreifen bringt dich schon bei normalen Funktionen in Teufels Küche. Erst recht bei rekursiven Funktionen.
Dein Funktion: (gekürzt auf das wesentliche)
function countUsersUsedBytes( $dir, $c_index )
{
...
if( is_dir( $f_file ) )
{
countUsersUsedBytes( $f_file."/", $c_index );
}
...
return $c_index;
}
Merke: In deiner Funktion gibst du den ermittelten Größenwert von $c_index zurück, aber dort, wo du die Funktion rekursiv aufrufst, nutzt du ihn nicht.
Kann also nicht funktionieren.
- Sven Rautenberg