4

サイズ変更された画像とサムネイルを動的に生成するCodeIgniterPHPサイトを引き継ぎました。

img100pxx100pxのサムネイルを生成するサイトのタグの例を次に示します。

<img src="/media/image/ImageName.jpg/100/100" />

これは、ヘルパーを使用して生成されます。

echo img('media/image/ImageName.jpg/100/100');

メディアコントローラの画像機能にはいくつかのロジックがあり、最初にキャッシュフォルダをチェックし、キャッシュされた画像が存在する場合はそれを提供します。

これはまだエレガントなアプローチではないようです。SilverStripeのような他のPHPフレームワークがそれを行う方法を見ると、次のようなことを行う方がよいでしょう。

echo img_link('ImageName.jpg', 100, 100);

ヘルパーのこの新しいimg_link関数は、最初にキャッシュされた画像をチェックしてリンクを画像ファイルに直接書き込むか、新しい画像を生成して直接リンクをhtmlに渡します。

私の考えでは、PHPがimgこのタイプのコードを使用してすべてを提供している場合

$this->output->set_content_type('jpeg')->set_output(file_get_contents($file_path));

それは常に非効率的です。

誰か考えますか?

4

1 に答える 1

1

私はあなたが提案していることを正確に実行し(すでにキャッシュされている場合はリンクを直接書き込む)、正常に機能することに同意します。

HTMLがキャッシュされていて、キャッシュされた画像を削除した場合にのみ、問題が発生すると思われるため、画像ファイルへの直接リンクが壊れています。

私の場合、キャッシュされた画像を削除する必要はなかったので、まだ削除していません。

それが問題であることがわかる他の唯一のケースは、プライベート画像がある場合です。その場合、phpは画像を表示する前に最初に誰が権限を持っているかを確認する必要があります。他の人がその直接リンクを共有できるため、キャッシュされたファイルを直接リンクとして提供することはできず、セキュリティは適用されなくなります。

それを行う必要があり、apacheにモジュールをインストールできる場合(apacheを使用していると仮定)、ファイル配信プロセスを経由ではなくapacheに引き渡すことができるモジュール「x-sendfile」があります。 php。これは、phpがタイムアウトする可能性がある大きなファイルなどに適しています

于 2012-05-09T12:35:50.797 に答える