複数のサイズの画像をキャッシュします。
画像情報:
- 元の URL: http://www.example-store.com/images/some-image.jpg
- 幅: 120
- 身長:150
- 優先画像ファイル名: image-file-name.jpg
そこで、次の画像キャッシュ URL を作成します。
http://cache.example.com/image/120x150/ksjdaflkj678687TYTGGGShjk78/画像ファイル名.jpg
この URL http://cache.example.com/image/120x150/ksjdaflkj678687TYTGGGShjk78/image-file-name.jpgが要求されると、これは舞台裏で (htaccess タイプのもの) http://cache に書き換えられます。 example.com/image.php?height=120&width=150&originalUrlHashed=ksjdaflkj678687TYTGGGShjk78&preferredFileName=画像ファイル名.jpg
ハッシュ化された画像がデコードされ、元の場所からダウンロードされ、サイズが変更されて物理的に保存されます: /image/120x150/ksjdaflkj678687TYTGGGShjk78/image-file-name.jpg 。なんで?2 番目のリクエストでは、ファイルがディスク上に物理的に存在し、通常のファイルとして返されるため、apache2 mod_expires キャッシュを使用でき、リクエストごとにイメージをダウンロードしてサイズ変更する必要はありません。
問題は、次のようなリモート イメージ URL にあります。
元の画像ハッシュは次のとおりです。
- eNptzbtOAzEQheGnoZwdr40JQkJIBIo0kI5y5cusM4pjWx4j5fFJICXt_x3pHMZoT4g8Rcp5CvWE0Qme3eTkcMaUq3cZhAdBJOFU7rT6en9FZR6MUXYD3vtH8LPR4Fcd4F4HFZ01q9MzzvjZOXFxeV_SC8fnt8sH7nuN32Esu5NLJHhtyzYzlbHcSPCjDvK1HgV3RRr3WpZ_0my7EHqSUVfMro3agG8IvwgbqxUkKtQ5wN8SrFJQ0tQk_gCey1fZ
これにより、URL は次のようになります。
この URL のハッシュ部分は 255 文字を超えているため、Apache エラーが発生します - https://serverfault.com/questions/120397/max-length-of-url-257-characters-for-mod-rewrite
編集:追加するだけです-問題はハッシュの長さにあります。ハッシュが 255 文字未満の場合、このソリューションは完全に機能します。
ここにはいくつかの考慮事項があります。
- キャッシュ URL は、それを呼び出しているサーバーとは別のサーバーにあります。これらはデータベースを共有しないため、元の URL を URL に含める必要があります。
- URL をハッシュし、そのハッシュをディレクトリ名として使用する必要があります。これにより、将来の要求のためにサイズ変更されたファイルをディスクに物理的に保存できます。
- これは、リクエスト 1 に応じて、魔法のようにファイルを作成し、ディスクに保存することを意味します。リクエスト 2 では、物理イメージを返すだけです。
- cache.example.com と URL を呼び出している Web サイトが同じサーバー上にあり、データベースを共有できる場合、画像 URL をテーブルに保存して、ハッシュまたはキーなどを返すことができます。残念ながら、これはオプションではありません。
ソリューション?
- 私が考えることができる唯一の解決策は、何らかの方法で URL を圧縮することです。ただし、URL に沿って機能させるために base64 エンコードする必要がある (実際にエンコードしている) ため、これにより余分なサイズが追加されます。
誰にもアイデアはありますか?
私が抱えている問題は、この質問に非常に似ています。