vtinnovations/file-inspector

File cleanup and management utility.

Maintainers

Package info

github.com/vtinnovations/file-inspector

Homepage

Type:contao-bundle

pkg:composer/vtinnovations/file-inspector

Transparency log

Statistics

Installs: 4

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-08-21 09:23 UTC

This package is auto-updated.

Last update: 2026-08-21 09:25:35 UTC


README

🇬🇧 English version

File Inspector ist ein Contao-Backend-Modul, das Dateien im Upload-Verzeichnis (/files) findet, die nirgendwo mehr referenziert werden, fĂŒr jede Datei genau zeigt, warum sie als verwendet oder unverwendet gilt, und das sichere AufrĂ€umen — mit Sicherungskopie und Papierkorb — direkt aus dem Backend heraus ermöglicht. ZusĂ€tzlich bietet es Werkzeuge zum Minifizieren von CSS/JS und zur Bildformat-Optimierung.

1. ProjektĂŒbersicht

File Inspector durchsucht die Contao-Datenbank (und optional den Projekt-Quellcode) nach Referenzen auf Dateien im Upload-Verzeichnis und stuft jede Datei als Referenziert, Unsicher oder Keine Referenz gefunden ein. Auf dieser Grundlage lassen sich unbenutzte Dateien geprĂŒft, exportiert und sicher gelöscht werden — mit einem integrierten Papierkorb fĂŒr den Fall, dass eine EinschĂ€tzung doch nicht zutraf.

2. Aktueller Implementierungsstatus

File Inspector ist eine vollstĂ€ndige, aktuelle native Implementierung — kein Prototyp, kein Platzhalter und kein reiner Nur-Lese-Zustand. Alle in diesem Dokument beschriebenen Funktionen sind end-to-end mit einer serverseitigen Umsetzung verbunden und wurden gegen den tatsĂ€chlichen Quellcode geprĂŒft.

3. UnterstĂŒtzte Framework- und Laufzeitversionen

  • Contao 5.3 oder neuer
  • PHP 8.2 oder neuer
  • Symfony 6.4 oder 7.0
  • Doctrine DBAL 3.6 oder 4.0

4. Systemvoraussetzungen

  • PHP-Erweiterung sodium (PrĂŒfung signierter Lizenzdaten)
  • PHP-Erweiterung curl (gesicherte Kommunikation mit dem Lizenzdienst)
  • PHP-Erweiterung pdo (Datenbankzugriff)
  • PHP-Erweiterung zip (nur fĂŒr die Funktion Export & Löschen erforderlich)
  • PHP-Erweiterung gd (fĂŒr Bildoptimierung; von Contao ohnehin vorausgesetzt)
  • PHP-Erweiterung imagick (optional; nur nötig, um SVG-Dateien als Quelle fĂŒr die Bildoptimierung zu nutzen)

5. Installation

composer require vtinnovations/file-inspector

Anschließend die Contao-Datenbankmigration ausfĂŒhren, um die benötigten Tabellen anzulegen:

php bin/console contao:migrate

Das Bundle registriert sich ĂŒber sein Contao-Manager-Plugin automatisch.

6. Composer-/Framework-Einrichtung

Das Paket ist als contao-bundle deklariert und wird vom Contao Manager automatisch erkannt und geladen — es ist keine manuelle Bundle-Registrierung nötig.

7. Erforderliche ausfĂŒhrbare Programme und Konfiguration

Außer der Contao-Datenbankmigration (Schritt 5) ist keine zusĂ€tzliche Konfiguration erforderlich. Ignorierregeln, Aufbewahrungsrichtlinien und die Lizenz werden ĂŒber die Backend-OberflĂ€che verwaltet, nicht ĂŒber Konfigurationsdateien.

8. Dateisystemberechtigungen

Der PHP-Prozess benötigt Schreibzugriff auf folgende Verzeichnisse unterhalb von var/ (werden bei Bedarf automatisch angelegt):

  • var/fi_scans/, var/fi_scan_jobs/, var/fi_exports/, var/fi_bin/
  • var/fi_settings.json, var/fi_retention.json, var/fi_minified.json
  • var/log/file_inspector/
  • var/file_inspector/ (Lizenzdaten, siehe Lizenzierung)

9. Backend- und Administrationszugriff

Das Modul erscheint im Contao-Backend unter System â€ș File Inspector. Der Zugriff wird ĂŒber die regulĂ€re Contao-Backend-Benutzergruppenverwaltung gesteuert — das Modul muss der jeweiligen Benutzergruppe wie jedes andere Backend-Modul zugewiesen werden. Die Lizenzverwaltung selbst befindet sich unter Contao â€ș Einstellungen â€ș File Inspector Licence management.

10. Frontend-Integration

Nicht zutreffend — File Inspector ist ausschließlich ein Backend-Werkzeug und stellt keine Frontend-Module oder -Inhaltselemente bereit.

11. Navigationsmodule in der tatsÀchlichen Reihenfolge

Reihenfolge Bezeichnung im Backend Zweck
1 🔍 File Inspector Übersicht, Scan starten, Ergebnisse
2 🔎 Verwendung File Usage Explorer
3 🗜 Minifizieren CSS/JS minifizieren
4 đŸ–Œ Bilder optimieren Bildformat-Konvertierung
5 🕐 Verlauf Scan-Verlauf
6 🗑 Papierkorb Gelöschte Dateien verwalten
7 ⚙ Ignorierregeln Ausschluss von Ordnern/Endungen
8 🔑 Lizenz Verweis auf Contao â€ș Einstellungen

12. Verifizierte Funktionen aller wesentlichen Module

Normal Scan

Ein schneller, rein datenbankbasierter Scan. Er sammelt jede referenzierte Datei-UUID ĂŒber:

  • DCA-Dateifelder — jede tl_*-Spalte mit inputType: fileTree oder eval.files / eval.filesOnly.
  • HTML-/Textinhalte — EinfĂŒgemarken ({{file::
}}, {{image::
}}, 
), HTML-Attribute (src/href/data-*), CSS-url()-Aufrufe und bare Upload-Pfade in jedem textarea-, codeEditor- oder Rich-Text-Feld.

Beide Quellen werden zeilenweise per Doctrine DBAL gestreamt, sodass der Speicherverbrauch auch bei großen Installationen konstant bleibt. Auf jeder Lizenzstufe verfĂŒgbar, einschließlich der kostenlosen.

Deep Scan

Alles aus dem Normal Scan plus einem Durchsuchen der Projekt-Quelldateien (PHP, Twig, HTML, JS, TS, CSS, SCSS, Less, JSON, YAML, XML, SVG, 
) unter src/, templates/, config/, vendor/ und public/. Deep Scan ergÀnzt:

  • Quelldatei-Referenzen — fest im Code, in Templates oder Konfiguration hinterlegte Dateipfade und UUIDs.
  • CSS-AbhĂ€ngigkeitsauflösung — transitive @import- / @use- / @forward- / url()-Ketten, sodass eine CSS-/SCSS-Teildatei, die nur von einer anderen Stylesheet eingebunden wird, weiterhin korrekt als verwendet gilt.
  • Unsicherheitserkennung — siehe unten.

Deep Scan ist langsamer und benötigt mehr Speicher. Nur auf der Pro-Stufe verfĂŒgbar.

Unsicherheitserkennung

Manche Dateien lassen sich weder als verwendet noch als unverwendet beweisen — etwa ein zur Laufzeit zusammengesetzter Dateiname oder ein Name, den mehrere Dateien teilen. Anstatt zu raten, markiert Deep Scan solche Dateien als Unsicher und dokumentiert den Grund: Fundstelle, ein kurzer Codeausschnitt und eine verstĂ€ndliche ErklĂ€rung — ein Dateiname als eigenstĂ€ndiges Literal, ein Teilpfad ohne Upload-PrĂ€fix, ein Dateiname neben einer Verkettung/Interpolation, oder ein Dateiname, der von mehreren Dateien geteilt wird (mehrdeutiger Treffer).

File Usage Explorer

Zeigt fĂŒr jede Datei, wo genau sie verwendet wird — vollstĂ€ndig aus einem gespeicherten Scan aufgebaut, ohne erneut zu scannen:

  • Datenbankreferenzen mit sprechendem Tabellennamen, dem Titel des Datensatzes (soweit auflösbar), einer Hierarchie ĂŒbergeordneter DatensĂ€tze (z. B. Seite → Artikel → Inhaltselement) und einem Bearbeiten-Link, der den Datensatz in einem neuen Backend-Tab öffnet.
  • Template-Referenzen (Twig / .html5), nach Pfad angezeigt.
  • Weitere Quelldatei-Referenzen, nach Sprache gruppiert (PHP, JavaScript, CSS, 
).

Evidence Viewer

Jede Referenz basiert auf einem Beleg. Der Evidence Viewer stellt jeden Beleg als verstÀndliches Typ-/Fundort-/Beschreibung-Tripel dar (Datenbank, Template, CSS, PHP, Twig, 
) statt roher interner Kennungen.

Export & Löschen

Bereinigt unreferenzierte Dateien sicher, in drei getrennten Anfragen, sodass ein ZIP-Download und eine Löschung niemals gekoppelt sind:

  1. Dateien auswĂ€hlen und einen ZIP-Export erstellen; eine BestĂ€tigungsseite zeigt Anzahl, GesamtgrĂ¶ĂŸe und hebt ausgewĂ€hlte Unsichere Dateien hervor.
  2. Das Archiv herunterladen.
  3. AusdrĂŒcklich Jetzt löschen bestĂ€tigen — oder abbrechen, wodurch der ausstehende Export verworfen wird, ohne etwas zu löschen.

Löschungen verschieben die Datei in den Papierkorb und entfernen ihren Eintrag aus der Contao-Dateiverwaltung. Jede Löschung wird im PrĂŒfprotokoll unter var/log/file_inspector/deletions.log festgehalten. Alle Pfade werden unmittelbar vor jeder Verschiebung erneut geprĂŒft (Eingrenzung, Traversierung, symbolische Links); ein einzelner Stapel ist auf 500 Dateien begrenzt. Nur auf der Pro-Stufe verfĂŒgbar.

Papierkorb

Gelöschte Dateien werden nicht zerstört, sondern in einen Papierkorb verschoben und dort aufbewahrt, bis sie manuell geleert werden (kein automatischer Ablauf). Eine Wiederherstellung bringt die Datei an ihren ursprĂŒnglichen Ort zurĂŒck und stellt ihren Dateiverwaltungs-Eintrag mit der ursprĂŒnglichen UUID wieder her, sodass jedes Inhaltselement, jede Galerie oder jeder Download, der auf sie verwiesen hat, weiterhin funktioniert — als wĂ€re sie nie gelöscht worden. Belegt bereits eine Datei den ursprĂŒnglichen Pfad, bietet die Wiederherstellung eine Auswahl zwischen Ersetzen und Überspringen (mit „FĂŒr alle anwenden“). Die Wiederherstellung steht immer zur VerfĂŒgung, auch ohne Pro-Lizenz.

Scan-Verlauf

Jeder abgeschlossene Scan wird automatisch gespeichert. Vergangene Scans lassen sich mit Modus, Datum, Dauer und Ergebniszusammenfassung durchsuchen; jeder Scan kann erneut geöffnet werden, ohne neu zu scannen. Alte Scans werden automatisch bereinigt: eine feste Obergrenze hĂ€lt die letzten 50 Scans, eine von der Bedienperson konfigurierbare Alterrichtlinie (ĂŒber die Verlaufsseite, Pro-Stufe) kann frĂŒher eingreifen. Der zuletzt gespeicherte Scan wird von keiner der beiden Richtlinien jemals entfernt.

Ignorierregeln

Schließt Ordner und Dateiendungen vom Scan aus — etwa files/archiv oder *.php. Exakte Namen und Glob-Muster (*, ?, [
]) werden unterstĂŒtzt; regulĂ€re AusdrĂŒcke nicht. Konfigurierbar unter Ignorierregeln (Pro-Stufe). Standardwerte: Ordner archive, backup, import, old, legacy; Endungen php, phar, phtml.

AJAX-Scan-Jobs

Scans laufen als inkrementelle Hintergrund-Jobs per AJAX, die die Arbeit in Stapeln (500 Upload-Dateien / 25 Quelldateien pro Anfrage) ĂŒber mehrere Anfragen verteilen. Das hĂ€lt jede Anfrage deutlich innerhalb ĂŒblicher PHP-Zeitlimits, zeigt einen Live-Fortschritt und blockiert das Backend nie durch eine einzelne lange Anfrage. Eine Sperrdatei verhindert zwei gleichzeitige Scans. Nur auf der Pro-Stufe verfĂŒgbar — auf der kostenlosen Stufe lĂ€uft ein Normal Scan weiterhin, jedoch synchron in einer einzigen blockierenden Anfrage ohne Fortschrittsanzeige.

Minifizieren (CSS/JS)

Listet jede CSS-/JS-Datei im Upload-Verzeichnis auf — unabhĂ€ngig vom Verwendungsstatus — und minifiziert eine gewĂ€hlte Auswahl direkt an ihrem Speicherort (keine neue .min.css-Datei). Nur Leerzeichen- und Kommentar-Minifizierung wird durchgefĂŒhrt, keine VerhaltensĂ€nderungen. Vor jedem Überschreiben wird eine Sicherungskopie angelegt, sodass eine fehlerhafte Minifizierung rĂŒckgĂ€ngig gemacht werden kann. Bereits minimale Dateien bleiben unangetastet und werden als ĂŒbersprungen markiert. Nur auf der Pro-Stufe verfĂŒgbar.

Bildoptimierung

Wandelt Bilder (JPEG, PNG, GIF, WebP, BMP oder SVG als Quelle) in WebP, AVIF oder ICO um, ohne die Originaldatei zu verĂ€ndern — die konvertierte Datei entsteht neu am selben Speicherort. WebP/AVIF stehen zur VerfĂŒgung, wenn die jeweilige Kodierfunktion in der GD-Erweiterung des Servers vorhanden ist; ICO ist immer verfĂŒgbar. SVG-Quellen erfordern zusĂ€tzlich die optionale Imagick-Erweiterung mit SVG-UnterstĂŒtzung. Auf dem jeweiligen Server nicht unterstĂŒtzte Kombinationen werden in der OberflĂ€che mit BegrĂŒndung deaktiviert angezeigt. Nur auf der Pro-Stufe verfĂŒgbar.

13. Berechtigungen und Zugriffskontrolle

Der Zugriff auf das Modul wird durch die regulĂ€re Contao-Backend-Benutzergruppenverwaltung gesteuert (Modulzuweisung wie bei jedem anderen Backend-Modul). Jede schreibende Aktion prĂŒft zusĂ€tzlich ein gĂŒltiges Contao-Anfrage-Token. Innerhalb des Moduls entscheidet die aktive Lizenz zusĂ€tzlich darĂŒber, welche Funktionen zur VerfĂŒgung stehen (siehe Abschnitt 14).

14. Lizenz- und Berechtigungsverhalten

File Inspector ist ein kommerziell lizenziertes Bundle. Auch die kostenlose Stufe erfordert eine aktivierte Lizenz. Die Lizenz wird ausschließlich unter Contao â€ș Einstellungen â€ș File Inspector Licence management verwaltet — es gibt keine Lizenzseite innerhalb des Moduls selbst.

Eine Lizenz ist an exakte Hostnamen gebunden, die aus der Domain-Einstellung der Root-Seiten stammen. example.com und www.example.com gelten als unterschiedliche Domains. Eine Installation ohne konfigurierte Domain kann keine Lizenz aktivieren.

WĂ€hrend des normalen Betriebs kontaktiert das Bundle bei bestimmten lizenzbezogenen VorgĂ€ngen den Lizenzdienst unter v-t.one ĂŒber eine vertrauenswĂŒrdige HTTPS-Verbindung, um die Berechtigung zu prĂŒfen. Anfragen gehen ausschließlich vom Server aus, niemals aus dem Browser; LizenzschlĂŒssel und weiteres Authentifizierungsmaterial erscheinen nicht in Browser-Ausgaben oder regulĂ€ren Protokollen.

VollstĂ€ndige Details — Aktivierung, tatsĂ€chliche LizenzzustĂ€nde und die Funktionsfreischaltungs-Tabelle — stehen in der eigenstĂ€ndigen Lizenzierung-Dokumentation.

15. Funktionsstatus-Tabelle

Funktion Status
Normal Scan Free und Pro
Deep Scan Nur Pro
Unsicherheitserkennung (Teil von Deep Scan) Nur Pro
File Usage Explorer / Evidence Viewer Free und Pro
Export & Löschen Nur Pro
Papierkorb / Wiederherstellung Free und Pro
Scan-Verlauf ansehen Free und Pro
Scan-Verlauf löschen / Aufbewahrungsrichtlinie Nur Pro
Ignorierregeln Nur Pro
AJAX-Hintergrund-Scans Bedingt — auf der kostenlosen Stufe lĂ€uft ein Normal Scan stattdessen synchron ohne Fortschrittsanzeige
Minifizieren (CSS/JS) Nur Pro
Bildoptimierung Nur Pro
Frontend-Module Nicht zutreffend

Die vollstĂ€ndige AufschlĂŒsselung nach Lizenzstufe steht in der Lizenzierung-Dokumentation.

16. Sicherheitsmodell

Jeder von der OberflĂ€che ĂŒbermittelte Dateipfad wird vor jeder DateisystemĂ€nderung geprĂŒft (Eingrenzung auf das Upload-Verzeichnis, Ablehnung von Traversierung und symbolischen Links) — unmittelbar vor jeder einzelnen Operation erneut. Jede geschĂŒtzte Funktion prĂŒft ihre eigene Berechtigung serverseitig, unabhĂ€ngig von der OberflĂ€che. Details stehen im eigenstĂ€ndigen Sicherheitsmodell.

17. Betriebssicherheit

LöschvorgĂ€nge sind nicht destruktiv (Papierkorb statt sofortigem Entfernen), ZIP-Export und Löschung sind in getrennte Anfragen aufgeteilt, und Minifizierung/Bildkonvertierung legen vor jeder Änderung eine Sicherungskopie an bzw. erzeugen ausschließlich neue Dateien, ohne die Quelle zu verĂ€ndern. SchreibvorgĂ€nge auf Dateien erfolgen atomar (temporĂ€re Datei plus Umbenennung).

18. Laufzeitverzeichnisse

Alle Laufzeitdaten liegen unterhalb von var/ (siehe Abschnitt 8 sowie Architektur fĂŒr die vollstĂ€ndige Übersicht).

19. Externe Kommunikation

Die einzige externe Serverkommunikation erfolgt mit dem Lizenzdienst unter v-t.one, ĂŒber vertrauenswĂŒrdige HTTPS-Verbindungen und ausschließlich vom Server aus — niemals aus dem Browser der Bedienperson. Details stehen in der Lizenzierung.

20. Protokollierung und SchwÀrzung vertraulicher Daten

Betriebsprotokolle (Löschungen unter var/log/file_inspector/deletions.log, Minifizierung und Bildoptimierung) enthalten Vorgang, Ergebnis, Zeitstempel und betroffene Pfade — keine LizenzschlĂŒssel oder sonstigen vertraulichen Daten.

21. Deployment

File Inspector wird wie jedes andere Contao-Bundle ĂŒber Composer ausgeliefert. Nach einem Deployment ist contao:migrate auszufĂŒhren (siehe Abschnitt 5). Bei einem Mehr-Server-Betrieb muss var/file_inspector/ auf gemeinsam genutztem Speicher liegen, damit alle Knoten denselben Lizenzstatus sehen.

22. Cache-Leerung

Nach einer Aktualisierung des Bundles den Contao-/Symfony-Cache wie ĂŒblich leeren:

php bin/console cache:clear

23. Tests

vendor/bin/phpunit

Die Testsuite (PHPUnit 10.5/11.0) deckt unter anderem die Scan-Pipeline, den Papierkorb, den Export-Workflow, Minifizierung, Bildoptimierung sowie die sicherheitskritischen Bereiche der Lizenz- und Berechtigungsverwaltung ab.

24. Fehlerbehebung

  • Lizenz lĂ€sst sich nicht aktivieren: PrĂŒfen, ob mindestens einer Root-Seite dieser Installation eine Domain zugewiesen ist (siehe Lizenzierung).
  • Deep Scan / Hintergrund-Scan nicht verfĂŒgbar: Diese Funktionen erfordern eine Pro-Lizenz.
  • Minifizierung/Bildoptimierung fehlgeschlagen: Details stehen in var/log/file_inspector/minify.log bzw. var/log/file_inspector/image_optimization.log.
  • Export & Löschen: Ein Löschvorgang ist niemals endgĂŒltig — gelöschte Dateien liegen im Papierkorb und lassen sich dort wiederherstellen.

25. TatsÀchliche bekannte EinschrÀnkungen

  • „Keine Referenz gefunden“ bedeutet, dass in den durchsuchten Quellen keine Referenz erkannt wurde — nicht, dass eine Datei garantiert an keiner Stelle mehr verwendet wird. Zur Laufzeit dynamisch zusammengesetzte Pfade, externe Systeme oder nicht durchsuchte Drittanbieter-Erweiterungen können unentdeckt bleiben. DafĂŒr existiert der Status Unsicher.
  • Normal Scan durchsucht keine Quelldateien; Referenzen, die ausschließlich im Code oder in Templates liegen, erfordern einen Deep Scan.
  • Deep Scan ĂŒberspringt Quelldateien ĂŒber einer konfigurierbaren GrĂ¶ĂŸe (Standard 5 MiB); Anzahl und GesamtgrĂ¶ĂŸe ĂŒbersprungener Dateien erscheinen im Scan-Bericht.
  • Ignorierte Ordner und Endungen werden vollstĂ€ndig von jedem Scan ausgeschlossen und nie gemeldet.
  • Datenbank-Textfelder werden fĂŒr die Unsicherheitsanalyse nicht erneut durchsucht.

Stets eine Sicherungskopie behalten. Der eingebaute Export & Löschen-Workflow macht dies zum Standardweg.

26. Lizenz- und Urheberrechtsinformationen

Quellcode-Lizenz: LGPL-3.0-or-later. Siehe LICENSE. Copyright: V&T Innovations Team (www.v-t.one).

Die Nutzung der Funktionen dieses Bundles erfordert unabhÀngig von der Quellcode-Lizenz eine aktivierte Lizenz (siehe Abschnitt 14 und Lizenzierung).

27. WeiterfĂŒhrende Dokumentation