ページ 11

【要望】ファイル管理のファイルサイズ上限を超えた場合のエラー表示について

Posted: 2010年8月31日(火) 12:48
by takyam
お世話様です。

「エレメント」→「ファイル管理」より、サーバー上のファイルの設置・編集が可能ですが、
(恐らく)設定してあるファイル容量制限を超えるサイズのファイルをアップロードしようとした場合に、
アップロード時の待ち時間が発生した後に、何のエラーも表示されずにファイル管理のルートに戻ってしまいます。

正しくアップロードされたのかどうか、一瞬わからなくなるのと、
深い階層にアップロードを試みた場合に、またそこまで掘り下げる面倒くささもありますので、
できればルートに戻らずにファイルサイズが限界超えてる旨のエラーが表示されると嬉しいです。

よろしくお願いいたします。

Re: 【要望】ファイル管理のファイルサイズ上限を超えた場合のエラー表示について

Posted: 2010年8月31日(火) 15:07
by kmikage
どもです。kmikageです。

これはMODxの仕様ではなく、PHPの仕様です。

システム情報のphpinfoに以下の記述がありますが、これがお使いのサーバのアップロード上限サイズです。
CentOSリポジトリの5.2では、以下のようになっていました。
upload_max_filesize 2M

このサイズを越えてアップロードリクエストを送ると、
PHPがリクエストを途中で止めてしまい、
「何もアップロードされなかった」事にしてアプリケーションを走らせます。
(単純にsubmitボタンを押した状態になる。)

よって、ちょっとトリックを仕掛けない限りアプリケーション側ではエラーかどうかわかりません。

また、JavaScriptはローカルファイルへの直接のアクセス権限は無いので、皆さんActiveXと併用するなど苦労しているようです。
(アップロードはブラウザの仕事なので、ファイルにアクセスするのはJavaScriptではなくブラウザです。)

例えば、以下のような回避方法があります。
・JavaScript+Flashなどで非同期にアップロード
・アップロード後のリクエストにアップロードしたファイル数を付与し、サーバ側でチェック

あと、.htaccessで秘密のおまじないを唱えると回避出来る場合もありますが、
結果的にリソースを過剰に消費するので占有サーバでもない限りお勧めはしません。

php_value upload_max_filesize 3939M

Re: 【要望】ファイル管理のファイルサイズ上限を超えた場合のエラー表示について

Posted: 2010年8月31日(火) 19:01
by yama
kmikageさんのヒントで次回のリリースで試してみます。でもなんとなく難しそー、、

Re: 【要望】ファイル管理のファイルサイズ上限を超えた場合のエラー表示について

Posted: 2010年9月01日(水) 03:29
by soushi
soushiです。

関係するかもしれないので補足です。
データをPOSTして処理をする際、指定した時間が経過するとphpの処理が中断されます。
(HTTP500エラーを返すんでしたっけ…うろ覚えです)

phpの設定では以下が関係するところです。

max_execution_time:php実行のタイムアウト
max_input_time:POST等入力のタイムアウト

それ以外に上位にproxyがいると、そちらのタイムアウト設定も絡んでくるので少々面倒な場合もあるかもしれません。
ただ、最近は結構回線速度は速いのでよほど大きいサイズじゃない限りタイムアウトにはならないと思います。

Re: 【要望】ファイル管理のファイルサイズ上限を超えた場合のエラー表示について

Posted: 2010年9月01日(水) 08:02
by yama
soushi さんが書きました:max_execution_time:php実行のタイムアウト
max_input_time:POST等入力のタイムアウト
ヘルプのsupportタブに追加してみます。
画像

kmikageさんのヒントに追加
http://php.net/manual/ja/ini.core.php
POSTデータの大きさが、post_max_sizeより大きい場合、 $_POST と $_FILES superglobals は空になります。この事象は、いくつかの方法で検出することができます。 例えば、$_GET 変数をデータを <form action="edit.php?processed=1">のように 処理するスクリプトに渡し、 $_GET['processed'] が設定されているかどうかを 確認する方法があります。
まだよく把握してないですが、たぶんこれも関係ありますよね