誰か(この場合は私)がPHPを介して画像を提供する理由のユースケースを紹介します。
私のアプリケーションの1つで、ユーザーはアバター画像をアップロードできます。これらの画像はアップロード時に処理され、名前がハッシュに変更され、ファイルシステムに保存されます。ハッシュされた名前は、写真のハッシュとユーザーIDを関連付け、これが選択されたプロフィール写真であるかどうかを示すテーブルのデータベースに保存されます。
Webサイトで単一の画像サイズのみを使用していた場合、画像パスと、それがプロファイル画像であるかどうかを保存し、それを使用していました。ただし、サイトには画像を表示できる場所が複数あり、サイズもさまざまです。要求された画像のサイズに応じて、それに近いサイズが生成されているかどうかを確認します。ある場合は、jpegヘッダーを送信readfile
し、画像の場所で使用して画像を提供します。そうでない場合は、最初にアップロードした画像を取得し、必要なサイズにサイズ変更してファイルシステムに保存し、提供します。
このように、誰かが画像をアップロードするたびに5つ以上の画像を作成するわけではありません。一部の画像サイズは要求されない場合があるため、画像はオンデマンドで生成され、CPU時間を分散し、ファイルシステムの使用量を削減します。
したがって、基本的に、これらが当てはまる場合は、PHP/CIを介してサービスを提供する必要はありません。
- アクセスを制限しない
- 動的なサイズ変更は必要ありません
- ウェブルートの外に画像を保存しない
興味がある場合は、私の画像の1つへのリクエストは次のようになります。
http://domain.com/photos/view/3d643a9cecaf8ae849be7ab094579698/s-128/photo.jpg
内訳:
http://domain.com/[controller/view]/[image hash]/[square, rectangular, or original]-[size in px]/photo.jpg
これにより、次のパスで画像が提供されます。
http://domain.com/images/uploads/3d/64/3a9cecaf8ae849be7ab094579698/3d643a9cecaf8ae849be7ab094579698_s_128.jpg
衝突が発生するように画像をサブディレクトリに保存し、ディレクトリあたりの最大ファイル数などによるファイルシステムの制限を回避します。また、画像をWebルートの外に移動して、Webに物理的にアクセスできないようにすることもできます。PHPを介して提供することには、アップロードディレクトリの場所を公開しないという追加の利点もあります。
答えが長かったことは知っていますが、それがあなたの決断に役立つことを願っています。