- 締切済み
メールフォームについて
大容量(30MB位)の添付ファイルを自分のHPからフォームから送れるようにしたいんですが、現在つかっているCGIではinternal server errorになってしまいます(2MB位までは大丈夫)。宅ファイル便みたいに大容量のファイルを送れるようにするには、php等を使用しないとだめなのでしょうか? 使用しているサーバーは「使えるNET」の共有サーバーでCGIの使用制限(時間、使用量)はありません。、CGIはfutomi's CGI CafeさんのMP Form Mail CGI Professional版です。 HP初心者なので本当に困っています。どなたか教えて頂ければ幸いです。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- 546
- ベストアンサー率100% (1/1)
すみませんが、あそこのサーバーは、使えるフォーラムがあるのですが…そこで質問はされましたか?
- 参考URL:
- http://forum.tsukaeru.net
- hikomin
- ベストアンサー率63% (40/63)
Premature…のエラーはいろんな場合に出てきますが、今回の場合は小さなファイルでは成功すると言う事から、アップロードのどこかの段階でエラーが発生し終了していることが考えられます。ひとまず、プログラムの冒頭付近(#!より下)に use CGI::Carp qw/ fatalsToBrowser /; を記述してdieをトラップしてみると、何か新たな情報が手に入るかも知れません。
- hikomin
- ベストアンサー率63% (40/63)
ソースコードを読んでいないのではっきりした事は言えませんが(シェアウェアだそうなので控えさせていただきますが)アップロードルーチンに根本的な制限がある場合もあります。例えば、CGIモジュールを利用したアップロードの場合、$CGI::POST_MAXで容量が制限されています。(もちろん、この値をいじれば変更出来ます。)独自ルーチンであれば、こうした制限は発生しませんが、通常何らかの制限を付ける事が多いでしょう。 こうした事はどんな言語でも同じです。#2さんが言われている通り、どこかで制限を付けないと大変危険なので。 大きなファイルを扱う場合は、いろんな問題を複合的に考えなければなりません。最大容量設定もそうですが、ウェブ・メールサーバが大容量データ受信をはじかないか、ブラウザがタイムアウトしないか、転送先のメールスプールは十分か、等。特に共用サーバでは多くの方が利用しているので、そのことも念頭において迷惑にならないよう気をつけてください。
- steel_gray
- ベストアンサー率66% (1052/1578)
> CGIの使用制限(時間、使用量)はありません。 と、ありますが実際には常識の範囲を超える動作をする場合、制限が掛かる場合があります。 (そうしないとプログラムミスによる無限ループなどでもサーバ停止になってしまいますから) 30MBのファイルの受信は結構きついと思いますので、 他の方の回答で解決できなければサーバ管理者に確認してみたほうがいいかと思います。
お礼
回答ありがとうございます。やはり専用サーバー等でなくてはきびしいのですね?とりあえずサーバー管理者に連絡してみます。
- kameson
- ベストアンサー率54% (13/24)
mpconfing.cgiのファイルにある「下記数値」は訂正しましたか? #■添付ファイルのサイズ上限(バイト) 添付ファイルのサイズの上限を設定します。単位はバイトです。添付ファイルがある場合には、暫定的にサーバ上にファイルを作成します。そのことを考慮に入れて適切なサイズに設定して下さい。目安として、「1048576」(1MB)あたりをお勧めします。 -------------------------------------------------- my $ATTACHMENT_MAX_SIZE = 1048576;
補足
回答ありがとうございます。添付ファイルの上限は25MBに設定してあります。やはり1~2MB位までが限度という事なのでしょうか?
お礼
回答ありがとうございます。ウェブ・メールサーバーの確認してみます。
補足
エラーログを調べた所「 Premature end of script headers: mpmail.cgi, referer: http:~.html」となっており、サーバー管理会社に連絡したところ「CGI(mpmail.cgi)がサーバーにヘッダー情報を送信せずに起動が終了しているという意味です。原因はお手数ですがお客様側での調査をお願い致します。」との事でした。お恥ずかしい話、初心者なのでいまいち理解できません。やはりサーバーの方でCGIの動作を止めてしまっているという意味なのでしょうか?