Hallo Mitleser,
je nach Hoster hat man keine Cronjobs, aber das Performanceproblem besteht durchaus. Es geht schnell, mit glob eine Dateiliste zu holen, aber der Zugriff auf die Dateiattribute ist zeitintensiv.
Auf Shell-Ebene kann man - zumindest unter Windows, eine Auflistung von Dateien sortiert nach Zeit anfordern (dir /O:D-
). DAS geht unter Windows fix, unter Linux weiß ich es nicht. Aber ich befürchte, dass die Ausführung von Shell-Befehlen je nach Hoster ebenfalls beschränkt ist.
Man braucht also bei sehr vielen Dateien ggf. eine Alternative zum Cron-Job. Die erstgenannte Alternative kann auch dann brauchbar sein, wenn man Cron-Jobs machen kann.
- Möglichkeit 1
- Wie kommen die Bilder ins Verzeichnis? Geschieht das unter Kontrolle von PHP? In dem Fall kann nach jedem Schreiben eines Bildes die Infodatei, in der der Name der neuesten Datei steht, von PHP aktualisiert werden. Getreu dem Prinzip: Don't compute what you already know.
- Möglichkeit 1a
- Beim Einstellen von Bildern kann man einen Eintrag in einer Datenbank machen und das neueste Bild über einen SELECT ermitteln.
- Möglichkeit 2
- Zwei Image-Ordner. Einer mit den neuesten Bildern, einer mit dem Rest. Man könnte alle Bilder, die älter als 24h sind, in den "Archiv" Ordner verschieben. Macht man das aus dem PHP Script der Webseite, braucht man allerdings Synchronisiermechanismen, damit nicht zwei parallel laufende Requests die gleichen Dateien verschieben wollen. Nicht so ganz trivial.
- Möglichkeit 3
- Wenn man die neueste Datei ermittelt, schreibt man eine Dummy-Datei (mit einem wohldefinierten Namen), deren mtime den Zeitpunkt der letzten Ermittlung markiert und in der der Name der neuesten Datei steht. Bevor man die neue Ermittlung startet, prüft man das Alter dieser Datei. Ist sie älter als X Sekunden, ermittelt man neu. Auf diese Weise hat man die Verzögerung nur in gewissen Abständen.
- Möglichkeit 3a
- Kommen die Bilder "zufällig" irgendwoher - z.B. von einer Webcam - oder werden sie zu bestimmten Zeitpunkten gezielt vom Admin hochgeladen? Wenn es der Admin ist, kann man mit einem "Staging"-Ordner arbeiten, d.h. man lädt die neuen Bilder erstmal dorthin und lässt dann ein Script laufen, das die neueste Datei ermittelt, deren Namen in der Infodatei ablegt und danach die Bilder in den /image-Ordner verschiebt.
- Möglichkeit 4
- Folgen die Dateinamen der Bilder einem Schema? Würde eine auf- oder absteigende Sortierung der Namen dazu führen, dass die neueste Datei vorn in der Liste steht?
So viele Möglichkeiten, so wenig Wissen über die Rahmenbedingungen...
Rolf
--
sumpsi - posui - obstruxi
sumpsi - posui - obstruxi