Holen Sie sich die Exif-Daten der Datei in NGINX

Holen Sie sich die Exif-Daten der Datei in NGINX

Im folgenden Code lege ich einige Variablen mit Informationen zum Bild fest (wie Titel, URL usw.).

location /photo {
    ssi on;
    ssi_last_modified on;
    set $photosrc /photos/$request_basename;
    set $phototitle $request_basename;
    ...
}

Ich möchte das Erstellungsdatum des Fotos auf der Seite anzeigen. Idealerweise sollte es in einer anderen Variable stehen…:

   ...
   set $photodate $???;
   ...

aber soweit ich weiß, gibt es in NGINX keine Variable, die das Datum der letzten Änderung enthält. Ich habe den Variablenindex durchgesehen, aber nichts gefunden. Nginx fügt das Änderungsdatum automatisch zum Last-ModifiedHeader hinzu, also sollte es dazu in der Lage sein. Ich habe auch versucht, es zu verwenden, ssi_last_modifiedaber einigen Antworten zufolge funktioniert es nicht, da NGINX nie vollständiges SSI implementiert hat.

Antwort1

Der Änderungszeitpunkt der Datei ist NICHT dasselbe wie das Erstellungsdatum des Fotos.

Es wäre zwar einfach, die Mtime so zu zwingen, dass sie mit den EXIF-Daten übereinstimmt, und diese als Proxy für die Daten zu verwenden, die Sie tatsächlich melden möchten, aber es gibt möglicherweise andere Daten, die in die Datei eingebettet werden können und nützlich sein könnten. Das klingt nach dem XY-Problem.

Vorausgesetzt, Sie verfügen noch nicht über eine Anwendungsserverfunktionalität auf dem Host, dann erscheint das Hinzufügen einer solchen nur zur Lösung dieses Problems übertrieben (und öffnet die Tür zu vielen Härtungskomplikationen). Wenn es nach mir ginge, würde ich einfach einen Crawler schreiben, der die Daten in ein maschinenlesbares Format im Dokumentstamm kopiert, z. B.

#!/bin/bash

if [ ! -f /var/run/lastexif ] ; then
   touch -t 198012250200 /var/run/lastexif
fi
mv -f /var/run/lastexif /var/run/lastexif.old
touch /var/run/lastexif
find /var/www/html/photo -type f -newer /var/run/lastexif.old | dump_exif_data

Wo dump_exif_datagibt es sowas wie....

#!/bin/bash

while read fname
do
  if [ -n "$fname" -a -f "$fname" ] ; then
     exiftool "$fname" | tr -s ' ' > "${fname}.exif"
  fi
done

Streuen Sie etwas Ajax-Magie auf Ihre Seiten, fügen Sie einen Cron-Job (oder Incron-Job) hinzu, um das Skript auszuführen, und schon ist die Arbeit erledigt.

verwandte Informationen