Das mit dem Dateiinhalt-Hash würde ich für einen Online-Abgleich sein lassen. Ein Foto-Ordner mit 1000 Fotos dauert dann zu lange. Es ist auch nicht nötig; es geht ja nur darum, eine abstrakte Zwischenschicht zu haben, um keine missbrauchbaren Datei- und Ordnernamen im Web verwenden zu müssen.
Du brauchst einen "Symbolnamen", mit dem Du die Datei in einer Webseite repräsentieren kannst, und dafür reichen eigentlich der Ordner- und Dateiname als Input.
Du KANNST das per Cronjob machen, aber auch "on the fly" beim Aufruf einer Bilderliste. Entscheidungskriterien hierfür sind:
- Kannst/Darfst Du Cronjobs laufen lassen
- Wie lange dauert es, die Dateien in einem Ordner mit der DB zu synchronisieren
- Bist Du bereit, bei einer Online-Synchronisierung alle potentiellen Kollisionen zu berücksichtigen, die entstehen können, wenn zwei Anwender gleichzeitig den gleichen Ordner aufrufen und damit gleichzeitig eine Synchronisierung für diesen Ordner anstoßen.
Der Vorschlag, die Symbolnamen statt dessen beim Seitenabruf zu erzeugen und in der Session zu speichern, dürfte weniger Kopfschmerzen machen. Es geht viel schneller, du musst nichts synchronisieren und niemand kann einen Link auf ein Bild speichern oder teilen - der Link ist nur während der Lebensdauer der Session dieses Benutzers gültig.
Es kann natürlich auch sein, dass du aus anderen Gründen ohnehin SQL-Daten für eine Datei brauchst (z.B. Fotobestellungen oder eine Beschreibung). Aber die kannst du auch anlegen, wenn sie relevant werden, und musst damit die reine Verzeichnisauflistung nicht ausbremsen.
Rolf