NGINXでファイルのExifデータを取得する

NGINXでファイルのExifデータを取得する

次のコードでは、画像に関する情報 (タイトル、URL など) を含むいくつかの変数を設定しています。

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

写真の作成日をページに表示したいと思います。理想的には別の変数に入れるべきでしょう…:

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

しかし、AFAICT では、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 ジョブ) を追加してスクリプトを実行すると、作業は完了です。

関連情報