php・GDでの画像生成について。


phpとGDで画像サムネイル作成や画像へのテキスト表示など、画像生成を行なっています。
ただ、アクセス数が増えると、結構な負荷になって困っています。

そこで、一度生成した画像をファイルへ保存して、
2度目からはそのファイルを読み込んで表示する方向で検討しています。

ただ、サーバーの容量の問題もあるので、
例えば最大容量10ギガとして、
それ以下にキャッシュを抑えるために、何か良い方法があれば、
アドバイス頂けると助かります。

画像を100kb前後として、ファイル5万個で古いのから削除する方法がいいのかな、なんて考えてます。

回答の条件
  • 1人10回まで
  • 登録:2009/01/06 17:38:33
  • 終了:2009/01/13 17:40:02

回答(3件)

id:tsukasa57 No.1

tsukasa57回答回数110ベストアンサー獲得回数202009/01/06 18:04:56

ポイント27pt

たぶん、キャッシュを作りたいと言うことだと思います。

php はよく知らないのですが

http://www.phpclasses.org/browse/package/313.html

というキャッシュライブラリを見つけました。

このライブラリは最も長い間使われなかったファイルから順に削除していく(LRUという)ものです。

キャッシュが必要になることはたくさんあるので、探すと他にも同様のライブラリがあると思う。

id:onigirin

どうもありがとうございます。

LRUというのですね。

一つ勉強になりました。

上記のライブラリはうまく使えなかったのですが、

LRUの仕組みを探して見ますね。

2009/01/06 19:11:46
id:goodvn No.2

goodvn回答回数228ベストアンサー獲得回数182009/01/06 18:20:41

ポイント27pt

もし cron が使えるなら,一定のルールで古いファイルを探して消していけば ok です

% find -mtime .... -exec rm -fr {} \;

みたいな感じになるでしょうか

ルールは,実際の容量を見ながら決めていけばよいでしょう

id:onigirin

どうもありがとうございます。

cronで消してみたいのですが、

ファイルが●個以上で削除、ということが可能なら助かりますねえ。

ファイル数列挙して・・・。

シェルスクリプトに書けばいいのか。

ちょっと調べながら試してみますね。

2009/01/06 19:16:28
id:pahoo No.3

pahoo回答回数5960ベストアンサー獲得回数6332009/01/06 21:26:46

ポイント26pt

もしDB(SQLiteで十分)が利用できるなら、リスクエスト頻度の高い画像だけ残すようにしてみてはどうでしょうか。

DBには、画像ファイル名とリクエスト回数を記録するようにします。

  1. クライアントからのリクエストを受け、すでにDBに存在している画像なら、DBからファイル名を取り出し、当該画像ファイルを表示する。
  2. DBに存在しない画像なら、画像を生成し、ファイルとして保存し、その画像ファイル名をDB登録する。
  3. 1,2のいずれの場合も、DBの画像ファイルのリクエスト回数を1つだけ増やす。
  4. 以上、1~3のプログラムは、現在使っている PHP + GD スクリプトを改造すればよい。
  5. DBのリクエスト回数を参照して、リクエスト回数の少ないものを削除する PHP スクリプトを作成し、cron で定期的に走らせるようにする。
id:onigirin

どうもありがとうございます。

DBを参照することと、このままphp/GDで画像生成するのと、

どちらが負荷が軽くなるのか試してみる価値はありますね。

ただ、今回はDB使えないので、他の方法を試してみます・・・。

2009/01/12 18:10:31
  • id:tsukasa57
    ちょっとだけ補足、このライブラリを使う場合はファイルサイズではなくファイル数でキャッシュの要領を管理することになりそうですね。1 ファイルあたりの画像サイズが概ね予想できるのであればファイル数で管理しても問題にはならないかと。
  • id:goodvn
    すいません.コマンド間違えてます

    % find (パス名)

    このパス名を入れてください.詳しくは,find のマニュアルを参照してください

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません