В следующем коде я задаю некоторые переменные с информацией об изображении (например, заголовок, URL и т. д.)
location /photo {
ssi on;
ssi_last_modified on;
set $photosrc /photos/$request_basename;
set $phototitle $request_basename;
...
}
Я хотел бы показать дату создания фотографии на странице. В идеале она должна быть в другой переменной…:
...
set $photodate $???;
...
но, насколько мне известно, в NGINX нет переменной, которая содержала бы дату последнего изменения. Я просмотрел индекс переменных, но ничего не нашел. Nginx автоматически добавляет дату изменения в заголовок Last-Modified
, так что он должен быть способен на это. Я также пробовал использовать , ssi_last_modified
но, согласно некоторым ответам, это не сработает, потому что 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) для запуска скрипта, и работа будет выполнена.