2009年07月01日
PHPでサムネイル作成に失敗する
会社のWebサイトをヘテムル(heteml)というレンタルサーバーで公開している。
このヘテムルは共用サーバーでPHPを使ったWebサービスの試作にも使っている。
専用サーバーと違って共用サーバーはメモリー容量、利用できるプログラムなど制限が課せられていて、Webサービスを動かそうとすると思わぬトラップもある。
先週末から写真(画像)を使ったWebアプリケーションの試作をしている。
hetemlではファイルのアップロードサイズが5MBという制限があるが、php.iniをコントロールパネルで変更できる。
とりあえずこの制限はクリアできた。ただ、最大サイズは50MBなので制限はある。
hetemlでupload_max_filesizeを変更
昨日から運用でこのくらいが上限かなと思う容量10MBでテストしているが、アップロードは問題なさそうだ。
しかし、アップロードした写真(画像)のサムネイル(縮小)画像をレンタルサーバー側で作成する部分で問題がある。
メモリー不足が原因でサムネイル(縮小)画像の作成に失敗するのだ。
よく調べてみると、
ImageCreateFromPNG()やImageCreateFromJPEG()の部分で、
メモリーにロードする時に致命的エラーが発生している。この後に
ImageCopyResampled()
を呼んでサムネイルを生成するのだが、メモリーが少ない環境ではこの手法は使えない。
しかし、いったいどのくらいメモリーは使えるのだろうか。
共用サーバーのメモリを調べてみると50MBだったが、実際に使えるメモリー容量は小さいようだ。
処理できた画像サイズから推定すると16MB程度が最大のようだ。(画像を読み込んだ実験による推定)
ちなみに、必要な容量はファイルサイズではなく、画像をビットマップ展開した時の容量である。
[width] x [height] x [1ピクセルあたりのバイト数](JPEGだと3,透過PNGだと4)である。
1000万画素クラスのカメラ、例えば幅3840ピクセル x 高さ2880ピクセルだと、
3840 * 2880 * 3 = 33177600(31.64MB)
軽く16MBを越えている。
PHPのモジュールを使う限り、このメモリー制限からは逃れられない。策はいくつかあるが、
外部コマンドを使う方法を調べたところ、どうやらImageMagickが使えるようだ。
次回、ImageMagickを使った結果を掲載したい。
【次の記事】
PHPスクリプトからImageMagickを使う
このヘテムルは共用サーバーでPHPを使ったWebサービスの試作にも使っている。
専用サーバーと違って共用サーバーはメモリー容量、利用できるプログラムなど制限が課せられていて、Webサービスを動かそうとすると思わぬトラップもある。
先週末から写真(画像)を使ったWebアプリケーションの試作をしている。
hetemlではファイルのアップロードサイズが5MBという制限があるが、php.iniをコントロールパネルで変更できる。
とりあえずこの制限はクリアできた。ただ、最大サイズは50MBなので制限はある。
hetemlでupload_max_filesizeを変更
昨日から運用でこのくらいが上限かなと思う容量10MBでテストしているが、アップロードは問題なさそうだ。
しかし、アップロードした写真(画像)のサムネイル(縮小)画像をレンタルサーバー側で作成する部分で問題がある。
メモリー不足が原因でサムネイル(縮小)画像の作成に失敗するのだ。
よく調べてみると、
ImageCreateFromPNG()やImageCreateFromJPEG()の部分で、
メモリーにロードする時に致命的エラーが発生している。この後に
ImageCopyResampled()
を呼んでサムネイルを生成するのだが、メモリーが少ない環境ではこの手法は使えない。
しかし、いったいどのくらいメモリーは使えるのだろうか。
共用サーバーのメモリを調べてみると50MBだったが、実際に使えるメモリー容量は小さいようだ。
処理できた画像サイズから推定すると16MB程度が最大のようだ。(画像を読み込んだ実験による推定)
ちなみに、必要な容量はファイルサイズではなく、画像をビットマップ展開した時の容量である。
[width] x [height] x [1ピクセルあたりのバイト数](JPEGだと3,透過PNGだと4)である。
1000万画素クラスのカメラ、例えば幅3840ピクセル x 高さ2880ピクセルだと、
3840 * 2880 * 3 = 33177600(31.64MB)
軽く16MBを越えている。
PHPのモジュールを使う限り、このメモリー制限からは逃れられない。策はいくつかあるが、
外部コマンドを使う方法を調べたところ、どうやらImageMagickが使えるようだ。
次回、ImageMagickを使った結果を掲載したい。
【次の記事】
PHPスクリプトからImageMagickを使う
Posted by 植物お手伝い係 at 18:27│Comments(2)
│レンタルサーバー
この記事へのコメント
あくまで個人的にですが、レンタルサーバーで数十MBの画像を処理するプログラムを動かすのは、マナー違反のような気がします。
基本的には、数百KBに押さえて、アップするのが常識では・・。
数十MBを行うんであれば、VPS(上位スペック)か専用サーバーじゃないと、共有している他のユーザーに影響が出ます。
後、プログラムの試作やアップテストなどは、XAMPPなどを利用してローカルでやりましょうよ・・。
基本的には、数百KBに押さえて、アップするのが常識では・・。
数十MBを行うんであれば、VPS(上位スペック)か専用サーバーじゃないと、共有している他のユーザーに影響が出ます。
後、プログラムの試作やアップテストなどは、XAMPPなどを利用してローカルでやりましょうよ・・。
Posted by miyata at 2009年09月22日 14:44
miyataさんへ
そうですね、数十MBの画像というのは共用型のような安価なレンタルサーバではよろしくありませんね。サーバーが安定して動作していてこそのWebサービスなので、控え目に使っていこうと思っています。
そうですね、数十MBの画像というのは共用型のような安価なレンタルサーバではよろしくありませんね。サーバーが安定して動作していてこそのWebサービスなので、控え目に使っていこうと思っています。
Posted by 植物お世話係 at 2009年09月22日 15:26