0

複数のサイズの画像をキャッシュします。

画像情報:

そこで、次の画像キャッシュ 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 文字未満の場合、このソリューションは完全に機能します。

ここにはいくつかの考慮事項があります。

  1. キャッシュ URL は、それを呼び出しているサーバーとは別のサーバーにあります。これらはデータベースを共有しないため、元の URL を URL に含める必要があります。
  2. URL をハッシュし、そのハッシュをディレクトリ名として使用する必要があります。これにより、将来の要求のためにサイズ変更されたファイルをディスクに物理的に保存できます。
  3. これは、リクエスト 1 に応じて、魔法のようにファイルを作成し、ディスクに保存することを意味します。リクエスト 2 では、物理イメージを返すだけです。
  4. cache.example.com と URL を呼び出している Web サイトが同じサーバー上にあり、データベースを共有できる場合、画像 URL をテーブルに保存して、ハッシュまたはキーなどを返すことができます。残念ながら、これはオプションではありません。

ソリューション?

  • 私が考えることができる唯一の解決策は、何らかの方法で URL を圧縮することです。ただし、URL に沿って機能させるために base64 エンコードする必要がある (実際にエンコードしている) ため、これにより余分なサイズが追加されます。

誰にもアイデアはありますか?

私が抱えている問題は、この質問に非常に似ています。

4

1 に答える 1

0

前回確認したところ、URL は 2083 文字まで保持できました。255 未満の US-ASCII 文字に収まるようにするアルゴリズムがあるとは思えません。

最初に URL を生成するのはあなたのように見えるので、私は単純にターゲット URL をサーバー (データベース テーブルなど) に保存し、それに関連付けられた ID (または実際のハッシュ) を使用します。次に、ID またはハッシュから URL を取得するのは簡単です。

GET メソッドは、大量のデータを送信するようには設計されていません。

編集:

私の答えは明らかに十分に明確ではないので、明確にしようと思います。

にリンクしたいとしましょうhttp://www.example.com/media/test.jpghttp://www.example.com/media/test.jpgこれまでのところ、たとえば難読化して、次uggcabcjjjwrknzcyrmpbzjzrqvnxgrfgwwctのような URL を生成します。

http://cache.example.com/image/150x125/uggcabcjjjwrknzcyrmpbzjzrqvnxgrfgwwct

私のアドバイスは、URL をデータベース テーブルに保存することです。

url_id url
====== =====================================
     1 http://www.example.com/media/test.jpg

...そして、次のような URL を作成します。

http://cache.example.com/image/150x125/1

URL を mod_rewrite する場合は、次のクエリを実行します。

SELECT url
FROM url_cache
WHERE url_id=1

...そして、出来上がり! http://www.example.com/media/test.jpg、URL で送信する必要なく戻ってきます。

または、実際のハッシュを保存して使用することもできます。

url_id url                                   hash
====== ===================================== =====
     1 http://www.example.com/media/test.jpg ae4a962c5c40dc8d59554a503719ce445c047246837c7203d319cd5b0b5b3703

... と:

http://cache.example.com/image/150x125/ae4a962c5c40dc8d59554a503719ce445c047246837c7203d319cd5b0b5b3703

これは不明瞭なテキストではなく実際のハッシュであるため、事前にサイズを把握できます。

于 2013-04-28T15:48:30.163 に答える