0

さまざまな html ソースと直接の画像リクエストから画像をロードすると、「ファイルが存在しません」という問題が発生します。残念ながら、これは、サイズ変更/キャッシュされた多くの画像が、このアプリのキャッシュ クリーン中に破棄されたため、再生成する必要があるためです。Apache は、ファイルがなくなったこと以外には何の違いも認識していないため、小さな画像に対する単純な http 要求は単にエラーを返します。

エラーが発生した場合にこれらの画像を再生成するスクリプトを書きたいと思います。つまり、エラーがトリガーされ、特定の元の画像が要求された場合に元の画像から問題の画像を再生成するスクリプトが呼び出され、キャッシュされた画像が提供されます。これを httpd で設定するにはどうすればよいでしょうか。

これはエラー ログのスニペットです。

[Mon Apr 15 13:51:36 2013] [error] [client xxx.xxx.xxx.xxx] File does not exist: /home/username/public_html/domain.tld/media/catalog/product/cache/1/small_image/180x180/4da38bab36523d0886e53b8d57126395/h/k/hk0412.jpg
[Mon Apr 15 13:57:24 2013] [error] [client xxx.xxx.xxx.xxx] File does not exist: /home/username/public_html/domain.tld/media/catalog/product/cache/1/image/4da38bab36523d0886e53b8d57126395/n/c/nca20212.jpg
[Mon Apr 15 13:57:47 2013] [error] [client xxx.xxx.xxx.xxx] File does not exist: /home/username/public_html/domain.tld/media/catalog/product/cache/1/image/4da38bab36523d0886e53b8d57126395/v/z/vz0612.jpg
[Mon Apr 15 13:58:42 2013] [error] [client xxx.xxx.xxx.xxx] File does not exist: /home/username/public_html/domain.tld/media/catalog/product/cache/1/small_image/220x220/4da38bab36523d0886e53b8d57126395/R/A/RA01112.jpg
4

2 に答える 2

2

画像が存在しない場合、Apache はこの目的で使用できる 404 エラー ページをトリガーします。リクエストごとに PHP スクリプトをトリガーしたり、書き換えルールを使用してファイルの存在を確認したりすることを避けたい場合があります。

ErrorDocument 404 /reCacheImage.php

このようなものを、仮想ホストのディレクトリコンテナー、または画像が欠落しているディレクトリ内の .htaccess のいずれかに配置します。画像を要求していない場合、404 の状況すべてにスクリプトで答える必要はありません。

スクリプトは、キャッシュされたバージョンを作成してディスクに保存し、ステータス 200 と作成された画像自体をブラウザに送り返すことができます。次回画像が要求されたときに呼び出されるべきではありません。

于 2013-04-15T20:46:58.913 に答える
2

リクエスト URL にたとえば が含まれている場合/cache/images/abc.jpg、PHP スクリプトが存在しない場合は、いくつかの PHP スクリプトに書き換えることができます。

# if the file exists, just send it
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^cache/image/.*$ - [L]

# if it doesn't exists, rewrite to PHP script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^cache/image/.*$ /path/to/script.php?url=$0 [L]

script.phpイメージを再生成し、クライアントに送信します。

于 2013-04-15T20:28:04.603 に答える