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つでも構いませんので、出来る限り情報のソース付きでご教示いただけたらと思います。
よろしくお願いいたします。
1.仮想メモリがなんとかしてくれますが、1GBを4人が一斉にアップロードしたりすると、4GB分のメモリが使われてかなり不安定になります
(ECC付きメモリを使うと落ちにくくなりました)
2.動く場合と動かない場合がありました(linux系OSだと比較的安定)、memory_limit ≧ post_max_sizeにしたがったほうが無難そう
(memory_limit = -1で使用メモリ無制限)
3.かなり無謀です、サーバが市内にあっても失敗率高かったです、コメントのFTPにするなり、分割して上げてもらうなりするのが無難です
"memory_limit"は、小さい値であれば、その数値以内でメモリの内容をテンポラリにフラッシュ(書き出す)するのだと思います。
実装済みのメモリ内かつPHPに割り当てて良い数値にしないとメモリを使い果たしてプロセスが落ちる可能性があると思います。
(ウォッチドッグ等の監視サービスによって監視されていれば)
時間が掛かる処理になるのであれば、その他に
max_execution_time の指定も必要です。
それ以内に終わらなければ、異常だと判断されて中断されます。
素直にFTPサーバを稼動させるほうが良いだろう。
コメントありがとうございます。
実は現状で既に稼動しているシステムで、諸事情でサーバ移行されることになり、
RAMが2GBから512MBに激減したもので…。
設定値をどうしたものかというのが質問の趣旨でした。
情報不足ですみません。
>一行目あたりのことについて詳しく書かれたページがあればありがたいのですが…。
というのは、↓これのことでしょうか?
>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