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

質問全般・改善要望
返信する
takyam
メンバー
メンバー
記事: 12
登録日時: 2010年2月22日(月) 15:40

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

投稿記事 by takyam »

お世話様です。

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

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

よろしくお願いいたします。
アバター
kmikage
管理人
記事: 396
登録日時: 2009年9月01日(火) 20:21

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

投稿記事 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
同人サークル にくじゃがソフトウェア
http://www.nikujaga.info/

ブログはじめました。
http://kmikage.nikujaga.info/
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

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

投稿記事 by yama »

kmikageさんのヒントで次回のリリースで試してみます。でもなんとなく難しそー、、
soushi
管理人
記事: 224
登録日時: 2009年7月30日(木) 01:59

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

投稿記事 by soushi »

soushiです。

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

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

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

それ以外に上位にproxyがいると、そちらのタイムアウト設定も絡んでくるので少々面倒な場合もあるかもしれません。
ただ、最近は結構回線速度は速いのでよほど大きいサイズじゃない限りタイムアウトにはならないと思います。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

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

投稿記事 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'] が設定されているかどうかを 確認する方法があります。
まだよく把握してないですが、たぶんこれも関係ありますよね
返信する