[gelöst] (Temporäre) Dateien regelmäßig / automatisch löschen, über Cron-Job?
am 05.08.2013 - 09:30 Uhr in
Hallo zusammen,
letzte Woche habe ich eine Website online gestellt, auf der automatisiert Bilddateien und PDF-Dokumente
generiert und in einem von mir erstellten temp-Verzeichnis (/sites/default/tmp/) gespeichert werden.
Da diese Dateien nicht unmittelbar gelöscht werden (können), müsste ich einen Weg finden, dies automatisiert
zu erledigen.
Ich könnte mir vorstellen, dass man das mit einem Drupal Cron-Job erledigen könnte, allerdings habe ich im Netz
bisher noch nichts für mich hilfreiches gefunden.
Würde sich dazu ein spezielles Modul eignen oder kann ich über ein eigenes Modul die "Löschen-Funktionalität"
programmieren und dem Cron irgendwie hinzufügen.
Wäre schön, wenn mir jemand weiterhelfen könnte...
Grüße, A. Winter
- Anmelden oder Registrieren um Kommentare zu schreiben
Für andere Personen, die
am 06.08.2013 - 16:17 Uhr
Für andere Personen, die ähnliche Anforderungen haben, möchte ich kurz meine Lösung beschreiben:
name = delete_temp_files
description = Delete files from the temporary directory.
core = 7.x
<?php
/**
* Implements hook_cron().
*/
function delete_temp_files_cron() {
// Serverpfad für das tmp-Verzeichnis ermitteln, z.B.
// "/server/path/www/sites/default/files/tmp"
$tmp_path = DRUPAL_ROOT . '/' . variable_get('file_public_path', conf_path() . '/files/tmp');
// Array mit allen Verzeichnissen unterhalb des tmp-Verzeichnisses, z.B.
// "/server/path/www/sites/default/files/tmp/07909024cfe6c5051a5ad200a85760ac"
// "/server/path/www/sites/default/files/tmp/0880094bbfeed8fcc85b9dc491151a27"
// usw.
$directories = glob($tmp_path . '/*' , GLOB_ONLYDIR);
// Jedes gefundene Verzeichnis unterhalb des tmp-Verzeichnisses rekursiv löschen
foreach($directories as $dir) {
$explode = explode("/", $dir);
$tmp_pointer = count($explode) - 2;
if($explode[$tmp_pointer] == "tmp") {
recursiveDelete($dir);
}
}
}
/**
* Delete a file or recursively delete a directory
*
* @param string $str Path to file or directory
*/
function recursiveDelete($str) {
if(is_file($str)) {
return @unlink($str);
}
else if(is_dir($str)) {
$scan = glob(rtrim($str,'/').'/*');
foreach($scan as $index=>$path) {
recursiveDelete($path);
}
return @rmdir($str);
}
}
?>
Den Cron kann man auch manuell im Backend aufrufen über Administration » Configuration » System und hier dann die URL mit dem Cron-Key aufrufen.
Viel Spaß beim nachbauen!