- ベストアンサー
Perl使用のアップローダーで、jpgだけアップロードできない。
●フォームのcgiは ---------- print "Content-type:text/html\n\n"; print "<FORM method='POST' action='2.cgi' enctype='multipart/form-data'>\n"; print "<INPUT size='40' type='file' name='upfile'> \n"; print "<INPUT type='submit' value='送信する'>\n"; print "</FORM>\n"; ---------- ●実際のcgiは ---------- require './cgi-lib.pl'; print "Content-type:text/html\n\n"; #フォームからのデータを受け取る &ReadParse; #ファイル名を指定する $fnme = 'sample'; ################## # 拡張子を求める # ################## $substrings1 = "\\"; $ichi = rindex $in[1], $substrings1; $search_moji = substr($in[1], $ichi); $substrings2 = "."; $substrings3 = "\""; $start_position = index $search_moji, $substrings2; $start_position = $start_position; $finish_position = index $search_moji, $substrings3; $moji_count = $finish_position - $start_position; $file_type = substr($search_moji,$start_position,$moji_count); $fnme = $fnme . $file_type; # 受信データを書き込む open OUT,">$fnme"; binmode OUT; print OUT $in{'upfile'}; close OUT; $mes = '書き込みが完了しました。'; #完了メッセージ print <<"HTML"; Content-type: text/html <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </HEAD> <BODY> $mes </BODY> </HTML> HTML exit; ---------- です。 txt、bmp、gif、xlsはテストしたところちゃんとアップロードされましたが、jpgだけができません。 特に制限はかけたつもりはないのですが、どこが原因でjpgのみダメなのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>cgi-lib.pl: Request to receive too much data: 169488 bytes cgi-lib.plでは、全送信量に対して制限がかけられており 上限 2^17 = 131072 < 実送信量 169488 ということです。 画像送信には、これでは少なすぎるでしょうからcgi-lib.pl内の以下の行を探して 適当な値に変更してみてはいかがでしょう。 $cgi_lib'maxdata = 131072; # maximum bytes to accept via POST - 2^17
その他の回答 (1)
- steel_gray
- ベストアンサー率66% (1052/1578)
ソースを見ても原因がわからなかったので・・ 「できない」とはどういう状況でしょうか? 実行すると500エラーになる? ファイルが作成されない? ファイルは出来るけどサイズが0? それらしいファイルは出来るけど画像として表示できない(壊れている)? 原因がありそうなところで、変数を出力してみるなどすると原因が探れるかと思います。 あと、別件ですがファイル名を求めるのに、¥の位置を頼りにしているようですが、ブラウザによってはパス情報を送信してきません。 ~ filename="xxxx.jpg" ~ みたいに名前だけを送ってくるブラウザがあります。 なので、ご自身で使うだけならいいのですが一般に利用できるものを作るなら修正が必要です。
お礼
回答ありがとうございます。 jpgをアップロードすると Content-type: text/html cgi-lib.pl: Request to receive too much data: 169488 bytes という表示がされ(2段目は太くて大きな字)ファイルが作成されていません。 bmpも、できるものとできないものがあるようです。 ファイルサイズの関係でしょうか? >あと、別件ですがファイル名を求めるのに、¥の位置を頼りにしているようですが、ブラウザによってはパス情報を送信してきません。 >~ filename="xxxx.jpg" ~ >みたいに名前だけを送ってくるブラウザがあります。 >なので、ご自身で使うだけならいいのですが一般に利用できるものを作るなら修正が必要です。 知りませんでした、ありがとうございます。 今回はIE5.5か6のみの使用なので、大丈夫だと思いますが、次回作成時には気をつけたいと思います。
お礼
回答ありがとうございます。 サイズだな、とは気づきましたがどこを直せばいいかわかりませんでした。 無事「999999」として、アップロードすることができました。 ありがとうございました。