From e58ebc5538f3f79f1a0d0eb25e446f9b67af9128 Mon Sep 17 00:00:00 2001 From: Terranom674 Date: Sun, 6 Sep 2026 21:09:58 +0200 Subject: [PATCH] Make WebDAV orphan cleanup continuous --- runtime/repair-webdav-orphans.php | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/runtime/repair-webdav-orphans.php b/runtime/repair-webdav-orphans.php index b531274..f00b886 100644 --- a/runtime/repair-webdav-orphans.php +++ b/runtime/repair-webdav-orphans.php @@ -25,22 +25,8 @@ $_SERVER['HTTPS'] = 'off'; require_once(PHPWG_ROOT_PATH.'include/common.inc.php'); require_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); -$stateRoot = '/var/lib/bratonien-tools/nc-connector'; -$marker = $stateRoot.'/.webdav-orphan-repair-0963.done'; - try { - if (is_file($marker)) - { - echo "NC WebDAV Altlasten-Reparatur: bereits abgeschlossen.\n"; - exit(0); - } - - if (!is_dir($stateRoot) && !mkdir($stateRoot, 0750, true)) - { - throw new RuntimeException('State-Verzeichnis konnte nicht angelegt werden: '.$stateRoot); - } - $relativePrefix = './_data/bratonien-tools/nc-webdav-gallery/connection-'; $absolutePrefix = rtrim(PHPWG_ROOT_PATH, '/').'/_data/bratonien-tools/nc-webdav-gallery/connection-'; $relativeLength = strlen($relativePrefix); @@ -51,6 +37,7 @@ try " OR LEFT(path,".$absoluteLength.")='".pwg_db_real_escape_string($absolutePrefix)."'"; $result = pwg_query($query); + $checked = 0; $staleIds = array(); while ($row = pwg_db_fetch_assoc($result)) { @@ -71,6 +58,7 @@ try continue; } + $checked++; if (!is_file($filesystemPath)) { $staleIds[] = $id; @@ -80,22 +68,19 @@ try $staleIds = array_values(array_unique(array_map('intval', $staleIds))); if ($staleIds) { + // Die Shadow-Quelle existiert nicht mehr. Der Bilddatensatz ist damit + // unabhängig von eventuellen virtuellen Album-Verknüpfungen ungültig. + // delete_elements(..., false) entfernt Piwigos Datensatz und Derivate, + // fasst aber keine bereits verschwundene Quelldatei an. delete_elements($staleIds, false); invalidate_user_cache(true); } - $payload = date('c').' removed='.count($staleIds)."\n"; - if (file_put_contents($marker, $payload, LOCK_EX) === false) - { - throw new RuntimeException('Abschlussmarker konnte nicht geschrieben werden: '.$marker); - } - @chmod($marker, 0640); - - echo 'NC WebDAV Altlasten-Reparatur: entfernte verwaiste Bilder='.count($staleIds)."\n"; + echo 'NC WebDAV laufende Bereinigung: geprueft='.$checked.' entfernte_verwaiste_bilder='.count($staleIds)."\n"; exit(0); } catch (Throwable $e) { - fwrite(STDERR, 'NC WebDAV Altlasten-Reparatur: '.$e->getMessage()."\n"); + fwrite(STDERR, 'NC WebDAV laufende Bereinigung: '.$e->getMessage()."\n"); exit(1); }