Freitag, 12. März 2010

Alte Dateien löschen

Wir wollen alte Dateien löschen. Nicht im Web, sondern auf einem lokalen Rechner unter Windows - eine klassische Administrationsaufgabe.
Wir definieren ein Löschalter in Stunden und der Bequemlichkeit halber auch in Tagen, geben den zu durchsuchenden Ordner und ein Merkmal im Dateinamen an.
$Stunden    = 12;
$Tage       = 3;
$MeinOrdner = "d:/Ordner/" ;
$Merkmal    = ".txt";
Aus unseren Zeitangaben berechnen wir das gesuchte Alter in Sekunden.
$LoeschAlter = (3600 * $Stunden) + (3600*24 * $Tage);
Das Alter der jeweiligen Datei berechnen wir auf der Basis seiner letzten Änderung (filemtime).
  $PfadName=$MeinOrdner.$Datei;
  $ZuletztGeaendert = filemtime($PfadName);
  $Alter=time()-$ZuletztGeaendert;
Jetzt vergleichen wir das berechnete Alter mit dem Löschalter und können entscheiden was mit der jeweiligen Datei passieren soll.
<?php
// Variablendeklaration
$Stunden    = 12;
$Tage       = 3;
$MeinOrdner = "d:/Ordner/" ;
$Merkmal    = ".txt";

//Alter in Sekunden
$LoeschAlter = (3600 * $Stunden) + (3600*24 * $Tage);

$VerzeichnisHandle = opendir($MeinOrdner);
while( $Datei = readdir($VerzeichnisHandle) )
{
    if( stristr($Datei, $Merkmal) )
    {
        $PfadName=$MeinOrdner.$Datei;
        $ZuletztGeaendert = filemtime($PfadName);
        $Alter=time()-$ZuletztGeaendert;
        if ($Alter>=$LoeschAlter)
        {
            echo "Alt $PfadName\n";
            //unlink($PfadName);
        }
        else
        {
            echo "Neu $PfadName\n";
        };
    };
};
closedir($VerzeichnisHandle);
?>
Der Aufruf unseres Programms kann nun über die Kommandozeile erfolgen:
"Pfad:/php.exe d:/phpskripte/MeinSkript.php". Zur Sicherheit für die etwas unbedachten Freunde von "copy & paste" ist die Löschanweisung auskommentiert.

Ein Hinweis noch: Um mit einer Datei arbeiten zu können ist es wichtig den korrekten Zugriff nicht allein über den Dateinamen, sondern über den Pfad zu realisieren.
Durchlaufen wir klassisch einen Ordner über einen Dateihandle, haben wir den Namen jeder Datei, es fehlt uns aber der Pfad. Nur wenn wir uns physikalisch im gleichen Ordner befinden haben wir keine Probleme damit.
Je nach Plattform sollte auch auf den korrekten Beginn des Pfades (Laufwerksangabe "c:", "./" oder "/") und beim "Zusammenbasteln" des Pfades auf korrekte "/" Trenner geachtet werden.
Glücklicherweise arbeitet Windows inzwischen auch korrekt mit dem "/".

Keine Kommentare:

Kommentar veröffentlichen