InternInhaltsverzeichnisGlossarBausteineLinklisteTutorialsKommentare

Thema: PHP - Alte Bilder (einer Webcam) löschen Artikel anzeigen

TomPomm ✶✶✶✶✶ schrieb am Dienstag, den 6 August 2019 #1
Vielen Dank für die vielen Snippets und Scripte auf deiner Seite.
Das Script auf dieser Seite funktioniert auch super.
Allerdings hab ich ein anderes Problem. Meine Webcam legt in dem Webcamverzeichnis eigene Unterverzeichnisse an. Nach Datum. Bspw: 20190805. Um dort die Bilder oder Videos zu löschen müsste das Script ja die Ordnernamen kennen. Oder zumindest die enthaltenen Dateien mit erkennen. Kannst du mir da bitte helfen? Danke im Voraus!
Werner schrieb am Dienstag, den 6 August 2019 #2
Hallo TomPomm,
möglich wäre das zum Beispiel so:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
// Alle Unterverzeichnisse bis auf dem aktuellen Verzeichnis löschen
// Schema: 20190806, 20180312 (JahrMonatTag)

date_default_timezone_set("Europe/Berlin");

// Verzeichnis in denen die Unterverzeichnisse gespeichert sind
$verzeichnispfad "webcam/";

$verzeichnisse array_slice(scanDir($verzeichnispfad), 2);
foreach (
$verzeichnisse as $verzeichnis) {
 if (
is_dir($verzeichnispfad $verzeichnis)) {
  if (
$verzeichnis != date("Ymd")) { // 20190806
   
if (rmdir($verzeichnispfad $verzeichnis)) {
    echo 
'Verzeichnis: ' $verzeichnis ' wurde gelöscht.<br>';
   }
  }
 }
}
?>

Löscht alle Verzeichnisse die nicht von "heute" sind! Bitte erst an einem Testverzeichnis ausprobieren.

Wenn es wie gewünscht funktioniert, könnte man eine Cron (Cronjob) hinzufügen, der das Script täglich, wöchentlich oder monatlich aufruft.
TomPomm schrieb am Dienstag, den 6 August 2019 #3
Hallo Werner,
danke für die schnelle Hilfe!
Allerdings wird nix ausgeführt und lediglich gemeckert in der Log-Datei wegen der nicht leeren Verzeichnisse
"PHP message: PHP Warning: rmdir(./webcam/20190803): Directory not empty in ..."
Werner schrieb am Mittwoch, den 7 August 2019 #4
Ok, ich habs mit leeren Verzeichnissen getestet 😅
Folgendes funktioniert bei mir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
// Alle Unterverzeichnisse bis auf dem aktuellen Verzeichnis löschen
// Schema: 20190806, 20180312 (JahrMonatTag)

date_default_timezone_set("Europe/Berlin");

// Verzeichnis in denen die Unterverzeichnisse gespeichert sind
$verzeichnispfad "webcam/";

$verzeichnisse array_slice(scanDir($verzeichnispfad), 2);
foreach (
$verzeichnisse as $verzeichnis) {
 if (
is_dir($verzeichnispfad $verzeichnis)) {
  if (
$verzeichnis != date("Ymd")) { // 20190806
   
if (delDateien($verzeichnispfad $verzeichnis)) {
    if (
rmdir($verzeichnispfad $verzeichnis)) {
     echo 
'Verzeichnis: ' $verzeichnis ' wurde gelöscht.<br>';
    }  
   }
  }
 }
}

function 
delDateien($verzeichnis) {
 
$dateien array_slice(scanDir($verzeichnis), 2);
 foreach (
$dateien as $datei) {
  if (
unlink($verzeichnis '/' $datei)) {
   echo 
'Datei: ' $verzeichnis '/' $datei ' wurde gelöscht.<br>';
  }
 }
 return 
true;
}
?>
TomPomm schrieb am Mittwoch, den 7 August 2019 #5
Danke! Genau das funktioniert bei mir auch!🙂
TomPomm schrieb am Mittwoch, den 7 August 2019 #6
ups. vergessen. Deine Idee mit dem Cronjob hab ich natürlich gleich mit umgesetzt. Danke nochmal für die Hilfe bei diesem und den anderen Themen!
Walter ✶✶✶✶✶ schrieb am Freitag, den 16 April 2021 #7
Hallo. Das wäre das richtige php für mich. Allerdings sind meine Bilder nochmals in einem Ordner images gespeichert. Also zB /secure/20210413/images . Bitte wie würde da der Code lauten, probier schon eine Zeit auf Verdacht, komme nicht dahinter. Sollte alle "Tagesordner samt Inhalt" löschen, die älter als 3 Tage sind.
Danke im Vorab und bleibe gesund. LG Walter
Werner schrieb am Freitag, den 16 April 2021 #8
Folgendes funktioniert bei mir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
// Alle Unterverzeichnisse die älter als 3 Tage sind löschen
// Schema: 20210413 (JahrMonatTag)

date_default_timezone_set("Europe/Berlin");

// Verzeichnis in denen die Unterverzeichnisse gespeichert sind
$verzeichnispfad "secure/";

$verzeichnisse array_slice(scanDir($verzeichnispfad), 2);
foreach (
$verzeichnisse as $verzeichnis) {
 if (
is_dir($verzeichnispfad $verzeichnis)) {
  
$strto strtotime("-4 day"time());
  
$zeit date("Ymd"$strto);
  if (
$verzeichnis <= $zeit) {
   if (
delDateien($verzeichnispfad $verzeichnis)) {
    if (
rmdir($verzeichnispfad $verzeichnis)) {
     echo 
'Verzeichnis: ' $verzeichnis ' wurde gelöscht.<br>';
    }
   }
  }
 }
}

function 
delDateien($verzeichnis) {
 
$verzeichnis .= "/images";
 
$dateien array_slice(scanDir($verzeichnis), 2);
 foreach (
$dateien as $datei) {
  if (
unlink($verzeichnis '/' $datei)) {
   echo 
'Datei: ' $verzeichnis '/' $datei ' wurde gelöscht.<br>';
  }
 }
 if (
rmdir($verzeichnis)) {
  return 
true;
 }
}
?>
Walter ✶✶✶✶✶ schrieb am Samstag, den 17 April 2021 #9
Vielen Dank für die Hilfe. Läuft perfekt !!!
Nur in Zeile 13 habe ich eine 3 geschrieben anstatt 4 ($strto = strtotime("-4 day", time()) ;)
Wird mittels Cronjob dann abgearbeitet. Super danke, Walter
Werner schrieb am Samstag, den 17 April 2021 #10
Zitat von Walter:
Sollte alle "Tagesordner samt Inhalt" löschen, die älter als 3 Tage sind.
Zitat von Walter:
Nur in Zeile 13 habe ich eine 3 geschrieben anstatt 4 ($strto = strtotime("-4 day", time())

if ($verzeichnis <= $zeit) { ...

Sicher, dass das dann nur Dateien gelöscht werden die älter als 3 Tage sind? 😉