QA@IT

PHPのメモリーリミットの上限値(ユーザによる画像投稿があるサイト)

3044 PV

フォームや、投稿メールから画像をアップロードしてもらうPHPで構築したサイトがあり、
専用サーバに自社管理のサイトをバーチャルホストで複数管理しております。

あるサイトAで投稿できた画像が、他サイトBでアップできないという報告を受け、調べてみたところサイトBでは画像のリサイズ処理にて、メモリーの上限を超えて処理が止まっておりました。さらに調べたところサイトAのphpのmemory_limitは256MB、サイトBは16MBに設定されていました。

サーバ機自体は2GBのメモリを積んでおります。上がらなかった画像は1944px×2592pxの画像でした。別サイトでもファイルサイズは100KB程度なのに、ピクセル数が3000×5000などという画像も最近報告があがり、制限をひくか、どう対応しようか検討中です・・。

解決するのにはサイトBのメモリーを上げればいいということはもちろんわかっているのですが、携帯でどんどん大きな画像が投稿できるようになっている今、適切な値をどのように皆さん考えて設定されているのかなーというのが気になっております。

なお、アップロードの頻度はそれほど多くなく、256MBの設定でもスワップは特に起こしたことはありません。が、可能性としては超えることもあり、多用したくないなーと思っています。WEBで探してもなかなか定石値というものは出て来なかったので、質問させていただきました。

何卒アドバイス頂ければとおもいますので、よろしくお願いいたします。

回答

まず、「サイトBのメモリー」が何を差しているのか、確認が必要です。
php.iniに記載されているmemory-limitが何を意味するのか、マニュアルを確認していらっしゃいますか?
http://php.net/manual/ja/ini.core.php

このデフォルト値は時勢を鑑みて時折引き上げられています。どの程度の設定が良いかは利用するサーバの物理的なメモリ容量や利用するサービス(Webサーバ専業なのか、DBなども混在しているのか)によって千差万別なので、定石というものは存在しません。
昨今のWebサーバにしては2GBのメモリは心許ないですが、memory-limitの値を引き上げつつ様子を見るのは悪い選択ではないと思います。

で。
改めてmemory-limitの意味をちゃんとご確認いただきたいのですが、これはアップロードされるファイルサイズと直接関係するわけではありません。
アップロードファイルのファイルサイズに直接影響するディレクティブはこちらです。
http://www.php.net/manual/ja/ini.core.php#ini.upload-max-filesize
http://www.php.net/manual/ja/ini.core.php#ini.post-max-size

PHPはマニュアルの整備という点で他言語に大いに秀でている言語です。
英語のものに比べ若干更新が遅れることはありますが、日本語マニュアルも大変充実しています。
疑問に感じたキーワードを、「PHP memory-limit」のような形で検索するとたいていマニュアルの適切なページにヒットしますので、まずこちらを探してみましょう。
下手な解説ブログよりも正確で適切な答えが多くの場合、書いてあります。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。