Vinzenz Mai: Script macht genau das, was programmiert ist :-)

Beitrag lesen

Hallo Kurt,

kann mir einer sagen, warum das Script im ersten Durchlauf nicht die Gesamtgröße in mb anzeigt?

das macht das Script nur dann, wenn die Maximalgröße überschritten wird.
So hast Du das programmiert.

Wird die Maximalgröße nicht überschritten, so wird im ersten Durchlauf die Gesamtgröße in MB angezeigt.

Wird die Maximalgröße überschritten, so

<?

function check_dir($pfad = './',$max_size = '') {

[...]

wird in der äußersten Schleife der if-Zweig ausgeführt,

Nach dem völlig überflüssigen rekursiven Absteigen in

die Funktion und dem Aufsteigen zurück bist Du in der

obersten Ebene im if-Zweig und es wird daher nichts

zurückgegeben.

if ($gesamtgroesse > $max_size) {
// lösche älteste Datei
asort($arr_files);
$fileNames = array_keys($arr_files);
unlink($fileNames[0]);
    check_dir('./',$max_size);

} else {

return $gesamtgroesse;

}
} // end function

//=========================================================
//  Scriptsuführung
//=========================================================

$gesamtgroesse = check_dir('./','100');
echo("fertig ".$gesamtgroesse." MB");
exit;
?>

und daher kann auch nichts ausgegeben werden.

  
Neben der bereits [von Tom geäußerten Kritik](https://forum.selfhtml.org/?t=209433&m=1425399), dass Du nichts mit dem übergebenen Pfad anfängst, kann Deine Funktion wunderbar in ein Speicherlimit laufen, weil Du für jede zu löschende Datei im rekursiven Aufruf erneut und zusätzlich den Verzeichnisinhalt in ein neues Array einliest, dieses sortierst, ...  
  
Vorschlag:  
Statt des rekursiven Aufrufs gehe besser wie folgt vor:  
  
Solange die Gesamtgröße größer ist als der erlaubte Maximalwert und noch Dateien vorhanden sind  
    Merke Dir die Dateigröße der Datei, die Du löschen willst.  
    Wenn das Löschen der Datei erfolgreich war,  
        ziehe diese Größe von der Verzeichnisgesamtgröße ab  
    Ende Wenn  
    Entferne die Datei aus dem Array  
    (auch wenn sie nicht gelöscht werden konnte, damit Du nicht endlos  
     hängen bleibst)  
Ende solange  
Gib die neue Gesamtgröße zurück  
  
  
Freundliche Grüße  
  
Vinzenz