2012-05-09 22 views
4

私はCodeIgniter PHPサイトを引き継ぎ、サイズ変更された画像とサムネイルを動的に生成しています。ここでPHPの動的画像

は100pxに100pxにしてサムネイルを生成し、サイト内のimgタグの例です:

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

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

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

でいくつかのロジックがありますメディア・コントローラー内のイメージ機能。最初にキャッシュ・フォルダーを検査し、キャッシュされたイメージが存在する場合はそのイメージを処理します。

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

この新しいimg_link機能で:

は、まだ、これはエレガントなアプローチとSilverStripeのような他のPHPフレームワークは、それを行う方法、このような何かをする方が良いだろうを見ていないようですヘルパーは最初にキャッシュされたイメージをチェックし、リンクをイメージファイルに直接書き込むか、新しいイメージを生成し、htmlに直接リンクを渡します。

私の考えは、PHPコード

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

のこのタイプを使用して、すべてのimgにサービスを提供している場合、それは常に非効率的になるということです。

誰でもいいですか?

+0

あなたは同じサイズの辺を維持しようとしているのですか? – AMayer

+0

いくつかのシナリオがあります。 1つはユーザー入力なしでサムネイルを生成することも、もう1つはサムネイルを作成する大きな画像の領域をユーザーが定義するサムネイルです。 –

答えて

1

私はあなたが提案しているもの(既にキャッシュされている場合は直接リンクを書く)を行い、うまくいきます。

私はあなたがhtmlがキャッシュされ、あなたがキャッシュされたイメージを削除したので、イメージファイルへの直接リンクが壊れていると思います。

私の場合、キャッシュされたイメージを削除する必要はありませんでしたので、まだそれを打つことはありません。

私はそれが問題であることがわかる唯一の他の場合は、私的な画像がある場合です。その場合、phpは画像を表示する前に誰が権限を持っているかを確認する必要があります。直接リンクとしてキャッシュされたファイルを提供するだけでなく、人々が直接リンクを共有できるようになり、セキュリティはもはや適用されなくなります。

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

+0

余分な点をありがとう、ありがとう。 –