【PHP】PHP5.2を使用したWebシステムで、1GBのファイルをアップロードしたいと考えています。

PHPマニュアルの記述のとおりに考えると、
memory_limit ≧ post_max_size ≧ upload_max_filesize
の関係である必要があるようです。(一般的に)

ところが、サーバのRAMが512MBしかありません。
1.memory_limitを有効にする場合、memory_limitに512MBよりも大きい数字を設定してもよいものなのでしょうか。(スワップありきの設定?)
2.memory_limitはpost_max_sizeよりも小さな値でも大丈夫なのでしょうか。
3.そもそも、RAMが512MBのサーバでPHPを利用して1GBのファイルをアップロードするのは難しいのでしょうか。(タイムアウトは長く設定するとして…)

これらについて、どれか1つでも構いませんので、出来る限り情報のソース付きでご教示いただけたらと思います。
よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/23 20:55:37
  • 終了:2010/03/24 13:38:23

ベストアンサー

id:aside No.1

aside回答回数339ベストアンサー獲得回数312010/03/24 09:48:44

ポイント35pt

1.仮想メモリがなんとかしてくれますが、1GBを4人が一斉にアップロードしたりすると、4GB分のメモリが使われてかなり不安定になります

(ECC付きメモリを使うと落ちにくくなりました)

2.動く場合と動かない場合がありました(linux系OSだと比較的安定)、memory_limit ≧ post_max_sizeにしたがったほうが無難そう

(memory_limit = -1で使用メモリ無制限)

3.かなり無謀です、サーバが市内にあっても失敗率高かったです、コメントのFTPにするなり、分割して上げてもらうなりするのが無難です


http://q.hatena.ne.jp/1178874933

http://q.hatena.ne.jp/1138084435

id:j1987

>asideさん

回答ありがとうございます。

やはり厳しいですよね…。

スワップ領域を相当量取ってもどうか…というところでしょうか。

もし可能でしたら追加でご回答お願いしたいのですが、

「4GB分のメモリが使われて」とありますが、ファイルのアップロードの場合でも

POSTであれば一旦全ファイル容量分がメモリに蓄積されるのでしょうか。

memory_limit分だけ読んでは(ハードディスクに)書き、読んでは書き…というようなイメージではないのでしょうか。

よろしくお願いします。

2010/03/24 10:01:14

その他の回答(1件)

id:aside No.1

aside回答回数339ベストアンサー獲得回数312010/03/24 09:48:44ここでベストアンサー

ポイント35pt

1.仮想メモリがなんとかしてくれますが、1GBを4人が一斉にアップロードしたりすると、4GB分のメモリが使われてかなり不安定になります

(ECC付きメモリを使うと落ちにくくなりました)

2.動く場合と動かない場合がありました(linux系OSだと比較的安定)、memory_limit ≧ post_max_sizeにしたがったほうが無難そう

(memory_limit = -1で使用メモリ無制限)

3.かなり無謀です、サーバが市内にあっても失敗率高かったです、コメントのFTPにするなり、分割して上げてもらうなりするのが無難です


http://q.hatena.ne.jp/1178874933

http://q.hatena.ne.jp/1138084435

id:j1987

>asideさん

回答ありがとうございます。

やはり厳しいですよね…。

スワップ領域を相当量取ってもどうか…というところでしょうか。

もし可能でしたら追加でご回答お願いしたいのですが、

「4GB分のメモリが使われて」とありますが、ファイルのアップロードの場合でも

POSTであれば一旦全ファイル容量分がメモリに蓄積されるのでしょうか。

memory_limit分だけ読んでは(ハードディスクに)書き、読んでは書き…というようなイメージではないのでしょうか。

よろしくお願いします。

2010/03/24 10:01:14
id:snufkinski No.2

Snufkinski回答回数41ベストアンサー獲得回数112010/03/24 12:46:31

ポイント35pt

"memory_limit"は、小さい値であれば、その数値以内でメモリの内容をテンポラリにフラッシュ(書き出す)するのだと思います。

実装済みのメモリ内かつPHPに割り当てて良い数値にしないとメモリを使い果たしてプロセスが落ちる可能性があると思います。

(ウォッチドッグ等の監視サービスによって監視されていれば)


時間が掛かる処理になるのであれば、その他に

max_execution_time の指定も必要です。

それ以内に終わらなければ、異常だと判断されて中断されます。


陥りやすい落とし穴 - PHPプロ!マニュアル

PHP設定を変える、調べる - phpspot

id:j1987

>snufkinskiさん

回答ありがとうございます。

一行目あたりのことについて詳しく書かれたページがあればありがたいのですが…。

max_execution_time の情報もありがとうございました。

今回はひとまず1GBというファイルサイズを諦めることにしました。

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

2010/03/24 13:37:29
  • id:Km1967
    POSTは失敗時のレジュームが出来ぬからやらないな。
    素直にFTPサーバを稼動させるほうが良いだろう。
  • id:j1987
    >Km1967さん

    コメントありがとうございます。

    実は現状で既に稼動しているシステムで、諸事情でサーバ移行されることになり、
    RAMが2GBから512MBに激減したもので…。
    設定値をどうしたものかというのが質問の趣旨でした。

    情報不足ですみません。
  • id:snufkinski
    j1987さん

    >一行目あたりのことについて詳しく書かれたページがあればありがたいのですが…。

    というのは、↓これのことでしょうか?

    >1.memory_limitを有効にする場合、memory_limitに512MBよりも大きい数字を設定してもよいものなのでしょうか。

    であれば、そのものズバリのサイトでなくすみませんが、海外のCMSのサポートフォーラムで以下のような記述を見つけました。
    PHP's memory_limit must be set to a value less than the sum of physical+swap meory present in the machine
    物理メモリとスワップの合計値を超えない範囲ということのようです。

    ただし、共有サーバの場合という仮定ですと、個々のアカウントに確約された容量以内でかつ、他のクリティカルなサービスに支障のない範囲ということになるでしょうね。


    ↓あたりもご参考になるかもしれません。
    http://mitsukuni.org/blog/2009/01/16/php%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E5%89%B2%E5%BD%93%E9%87%8F%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/
    http://nplll.com/mutter/archives/2009/08/php_phpmemory_limit.php


    また、VBScriptも併用してよければ、以下のような分割アップロードも見つけました。
    http://blog.jojo.jp/?eid=1197658

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

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

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

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