Files am FTP automatisch löschen

hoelzlmani

Grünschnabel
hallo
ich kenn mich mit php oder scripten leider überhaupt nicht aus.
Meine Überwachungskamera schickt per wlan ins FTP Verzeichnis /FI9805W_xxxE61FFCC/record/ die .mp4 files
und unter /FI9805W_xxxE61FFCC/snap die .jpg bilder.
Ich möchte diese jedoch automatisch per cronjob nach 2 Tagen löschen.

Mein FTP Anbieter lässt Cronjob zu, nur ich brauch zuerst das PHP Script.

Mit der Suchfunktion hab ich folgendes xxx.php gefunden.
<?php


$dir = '/FI9805W_xxxE61FFCC/';
$handle = opendir ( $dir );
while( false !== ( $file = readdir( $handle ) ) ) {
if( filemtime( $file ) > ( time() - 60*60*24*2 ) ) {
unlink( $dir . $file );
echo 'Die Datei wurde geloescht.';
}
else {
echo 'Die Datei ist aelter als 48 Stunden.';
}
}
?>

dieses file hab ich am ftp mit loeschen.php genannt und im Brower aufgerufen. Jetzt schreibt er unendlich lange nur Die Datei ist aleter als 48 Std hin und hört nicht mehr auf. Files werden keine gelöscht.

Kann mir bitte jemand helfen, wie ich meine JPG und mp4 files automatisch gelöscht bekomme. Dank
 
Hi

versuch einmal
PHP:
<?php
	$dir = '/FI9805W_xxxE61FFCC/';
	$handle = opendir($dir);
	$cnt = 0;
	while(false !== ($file = readdir( $handle ))) {
		if((time()-60*60*24*2) > filemtime($file)) {
			unlink( $dir . $file );
			echo $file . ' geloescht.';
			$cnt++;
		}
	}
	echo 'Anzahl: ' . $cnt;
?>
 
Zuletzt bearbeitet:
jetzt gehts in die richtige richtung. files wurden gelöscht, jedoch alle im verzeichnis!!! mit der zeit passt hier etwas nicht. kann man es noch einstellen, dass nur mkv und jpg gelöscht werden?
 
ja ganz sicher. da die kamera ja relativ viele videos auf den ftp schickt. hab es heute nochmals probiert, da ja wieder einige files dazugekommen sind und es sind wieder alle gelöscht worden. die von heute und gestern hätten ja bleiben sollen, jedoch von vorgestern und noch älter löschen.

dies ist ohnehin nur jetzt zum test, wenn das script passt, dann soll der wert auf 7 tage erhöht werden, die werte erhöh ich dann halt.
 
Nimm doch mal den unlink() für den Test raus und gibt statt dessen die filemtime(), die aktuelle Zeit via time() und den Namen der Datei mit echo aus. Nur so zum rausfinden, warum der Code nicht das tut, was du erwartest.

Zuletzt noch ein Resourcen-Cleanup-Fehler: es fehlt ein closedir($handle) nach der While.
 
Danke saftmeister fuer die Antwort. Da ich wie im ersten Beitrag geschrieben habe null Ahnung habe , verstehe ich nur Bahnhof :( was soll ich wo und wie schreiben? sorry.
 
Hi,

ungefähr so:

PHP:
<?php
    $dir = '/FI9805W_xxxE61FFCC/';
    $handle = opendir($dir);
    $cnt = 0;
    while(false !== ($file = readdir( $handle ))) {
        $mtime = filemtime($dir . $file); // ggf. filectime() statt filemtime() verwenden
        $timeout = time()-60*60*24*2;
        if($timeout < $mtime) {
            //unlink( $dir . $file );
            printf("%s: mtime = %s, timeout = %s => gelöscht\n", $file, strftime("Y-m-d,H:M:S",$mtime), strftime("Y-m-d,H:M:S",$timeout));
            $cnt++;
        }
    }
    closedir($handle);
    echo 'Anzahl: ' . $cnt;
?>

Beim Einbauen des Debuggings ist mir aufgefallen, dass bei der if-Prüfung der Größer-Als-Operator falsch sein müsste. Ich habe ihn mal korrigiert. Die Debug-Ausgabe wirds zeigen...
 
Zurück