Amazonの画像サーバーのようにURLで引数を与えることで、画像サイズを自由に指定できる仕組みを作成したいのですが、逐一PHPでリサイズ→出力をしていると多量の画像を一度に貼る場合など、かなり負荷がかかることが懸念されます。そもそもPHPではダメなのか、それともPHPでも可能ならばどうすれば良いのか、など教えていただけないでしょうか。
したいのって「引数によって都度、画像を静的な生成ファイルを生成する」ってことですかね?であればPHP等のサーバサイドの言語でできます。
大中小みたいなざっくりしたサイズがあって、引数でどれを読み出すかただ選ぶだけ(サーバには3サイズ既に用意してある)とかであれば、JavaScriptとかでも大丈夫かと。
大中小とサイズをあらかじめ指定すると、あとからの仕様変更に柔軟に対応できないので、前者の方法ですね。PHPの画像処理はもちろん心得ていますが、何分アクセスが増えた時に多量の画像を逐一処理していると負荷に耐え切れるのか心配なので…。
ちょっとすぐに「これ」というのは言いづらいんですが、実際のところアクセス時にどれぐらい画像のリサイズが発生するかにもよりそうですね。
たとえば3パターンじゃないにしろ、パターンがある程度決まっているのであれば、1度アクセスのあったサイズは物理的にファイルを残しておけばリサイズの負荷はかからなくなりますよね。アクセスのたびにDBから読みだしてリサイズして表示するよりはるかに早いはずです。静的ファイルへのアクセスでダメなレベルならサーバのスペックか、負荷分散の設計自体か、その辺をそもそも見直す方がいいのではと思います。
静的ファイルを生成するのがマズいぐらいに、サイズのパターンがバラバラなのであればキャッシュを残すような方法でしょうか。キャッシュはcronで定期的に綺麗にしつつで。
今ある情報からだとそんなイメージでした。
なるほど。現在の仕様に合わせてキャッシュを残しておけばいいのですね。早速その方法で試してみます。
これとかどうですか?
紹介どうもです。ただキャッシュ機能がないと負荷問題がつきまとうので厳しいですね。
一度生成したヤツはサーバに置いといて、同じサイズの呼び出しはそれを返すようにすりゃいい。大量貼り付けでも重いのは最初の一回だけになる。
回答有難うございます。昨日そのような仕様をコメントで提案頂いたので、本日無事に完成することができました。
みんなの回答 3 件
したいのって「引数によって都度、画像を静的な生成ファイルを生成する」ってことですかね?であればPHP等のサーバサイドの言語でできます。
大中小みたいなざっくりしたサイズがあって、引数でどれを読み出すかただ選ぶだけ(サーバには3サイズ既に用意してある)とかであれば、JavaScriptとかでも大丈夫かと。
これとかどうですか?
URLにちょこっと細工することで簡単に画像のリサイズができるPHPスクリプト『Smart Image Resizer』 | ID...
http://www.ideaxidea.com/archives/2008/03/urlphpsmart_image_resizer.html一度生成したヤツはサーバに置いといて、同じサイズの呼び出しはそれを返すようにすりゃいい。大量貼り付けでも重いのは最初の一回だけになる。
関連するトピックス