1mb 弱の小さなファイルならば、アップロードが終了して、メッセージが表示
されます。
一方、30mb 程度のファイルを送ろうとすると、アップロードが終了するよりも
早く処理が中断されたり、アップロードが終了しているにもかかわらず終了の
メッセージが表示されず、単に「サーバーが見つかりません」と表示されるだ
け、と言う状態が続いています。
xrea 側のサーバーの設定は、
[table]
[tr][td][/td][td]Local Value[/td][td]Master Value[/td][/tr]
[tr][td]file_uploads[/td][td]On[/td][td]On[/td][/tr]
[tr][td]upload_max_filesize[/td][td]50M[/td][td]32M[/td][/tr]
[tr][td]post_max_size[/td][td]50M[/td][td]32M[/td][/tr]
[tr][td]max_input_time[/td][td]600[/td][td]180[/td][/tr]
[/table]
となっているので、"max_input_time" 時間内であれば 50mb でも大丈夫だろう
と試したのですが、時間内に終わってそうなのにメッセージを返してこない、
と言う結果になっています。
Administration > System configuration > Miscellaneous settings
Maximum upload size:
50000000 (bytes)
$maxsize = `50000000`
・MySQLのファイルサイズ制限
ご利用のスニペット(ファイルアップローダ)についてはまだ詳しく調べていませんが、MySQLの1ファイルあたりの登録制限値は確か16MBだったような気がします。(Ver.4.~)
ファイルサイズをMODx的に、MySQL内部で管理しようとしている場合、この制限値にひっかかっているのでは?
・Apacheの設定による制限
確か、Apacheにも、使用メモリ容量についての制限設定があったような・・・
(今ぐぐったら「RLimitMEM」という単語が出てきましたが、これのことかな?)
Apacheによるプロセスへのメモリ制限がある可能性は?
・php.iniのMemory_limit
確か、php.iniの設定に、upload_max_filesizeやpost_max_sizeのほかに、memory_limitとかいう設定値があったはず。この辺が怪しい?
もしかして、 upload_tmp_dirを変えてみたらいけたり・・とか・・
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="50000000" />
Send this file <input name="userfile" type="file" />
<input type="submit" value="Send file" />
</form>
<?php
if ($_FILES["userfile"]["tmp_name"]) {
if (move_uploaded_file ($_FILES["userfile"]["tmp_name"], "/virtual/xxx/public_html/uploads/".$_FILES["userfile"]["name"])) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
} else {
echo "Possible file upload attack: ";
echo "filename '". $_FILES['userfile']['tmp_name'] . "'.";
}
?>
</body>
</html>
(1) CGI 版で max_input_time を変更する、
(2) ob_flush(); flush() を使う、