Получить данные exif файла в NGINX

В следующем коде я устанавливаю некоторые переменные с информацией об изображении (например, заголовок, URL-адрес и т. д.).

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

Я хотел бы показать дату создания фотографии на странице. В идеале это должно быть в другой переменной…:

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

но AFAICT в NGINX нет переменной, содержащей дату последнего изменения. Я просмотрел индекс переменной, но ничего не нашел. Nginx автоматически добавляет дату изменения взаголовок, поэтому он должен быть способен на это. Я также пробовал использоватьно, согласно некоторым ответам, это не сработает, потому что NGINX никогда не реализовывал полный SSI.

1 ответ

Время изменения файла НЕ совпадает с датой создания фотографии.

Хотя было бы просто заставить mtime соответствовать данным EXIF ​​и использовать его в качестве прокси для данных, которые вы действительно хотите сообщить, потенциально есть и другие данные, которые могут быть встроены в файл, и которые могут быть полезны. Это похоже на проблему XY.

Если предположить, что у вас еще нет возможности сервера приложений на хосте, то добавление его только для решения этой проблемы кажется излишним (и открывает дверь для множества сложностей, связанных с усилением защиты). Итак, если бы это был я, я бы просто написал сканер, который выгружает данные в машиночитаемый формат внутри корня документа, например

      #!/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

Гдеdump_exif_dataэто что-то вроде....

      #!/bin/bash

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

Добавьте немного магии ajax на свои страницы, добавьте задание cron (или задание incron) для запуска сценария и работа выполнена.

Другие вопросы по тегам