Perlのファイルのアップロード方法

このQ&Aのポイント
  • Perlのファイルのアップロード方法についての要約文1
  • Perlのファイルのアップロード方法についての要約文2
  • Perlのファイルのアップロード方法についての要約文3
回答を見る
  • ベストアンサー

Perlのファイルのアップロードの方法についてお聞きします。

Perlのファイルのアップロードの方法についてお聞きします。 &ReadParseを用いた方法で、 $file = $in{'TENSOU'};で$file自体にデータが入るので 簡単だなと思っていましたが、送信元と送信後のファイルが若干違っていました。 使い方が間違っているのでしょうか? 以下、サンプル ◆HTML側 <FORM ACTION="up.cgi" ENCTYPE="multipart/form-data" METHOD="POST"><P> ファイル: <INPUT TYPE="file" NAME="TENSOU" SIZE="32"><BR> <INPUT TYPE="submit" VALUE="送信"> </FORM> ◆Perl側 &ReadParseの例を用いた方法 #!/perl/bin/perl #!/usr/local/bin/perl use CGI; use CGI::Carp qw(fatalsToBrowser); #--->エラー対策 require 'cgi-lib.pl'; require 'jcode.pl'; $BUFSIZE = 2048; &ReadParse; # ==> 強力な変換 $file = $in{'TENSOU'}; # ==> 実態自体がデータなので、取り扱いしやすい $file_size = length($file); $file_size *= ($BUFSIZE / 1024); open(OUT, "> test.jpg"); print(OUT $file); close(OUT); print "Content-type: text/html\n\n"; print "$file_size(KB)<br>\n"; print "<a href=\"test.jpg\">テスト</a>\n"; exit;

  • CGI
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • estea
  • ベストアンサー率44% (39/87)
回答No.1

はじめまして。 cgi-lib は使わんので分からんのですが、気になったところだけ。 > $file_size *= ($BUFSIZE / 1024); これってなんですか? あと、OSなんですか? windows のばあいは >open(OUT, "> test.jpg"); >print(OUT $file); >close(OUT); で、バイナリデータを書き込むと死ねます・・・

関連するQ&A

  • perlがうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。

    • ベストアンサー
    • Perl
  • Perlがサーバー上でうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n; print "まずい$in{'form2'}\n; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。

    • ベストアンサー
    • Perl
  • perlでCSV形式ファイルのアップロード方法

    perlでCSV形式ファイルのアップロード方法を教えてさい。 htmlで <HTML> <BODY> <FORM action="excel読み込み.cgi" enctype="multipart/form-data" method="post"> フレアシステムのファイル: <INPUT type="file" name="upload_file" size="60"><BR> <INPUT type="submit" value="読み込み"> </FORM> </BODY> </HTML> として、ファイル名の指定をして、読み込みボタンを押すと、excel読み込み.cgiを呼び出すのですが、プログラムの内容が表示されるだけで終わってしまいます。 excel読み込み.cgiのプログラムは以下の内容です。 #! c:/perl/bin/perl use CGI; $query = new CGI; $filename = $query->param('upload_file'); while(read($filename, $buffer, 2048)) { $file .= $buffer; } @files = split(/\\/, $filename); ($basename, $exp) = split(/\./, $files[-1]); $new_file = $basename . "." . $exp; # ファイルを指定ディレクトリにコピー #open(OUT, "> c:\\foo\\$new_file"); open(OUT, "> c:\\$new_file"); binmode(OUT); print(OUT $file); close(OUT); print "Content-type: text/html\n\n"; print "[$basename] [$exp]\n"; print "正常終了\n"; exit; CGIのプログラムを色々と調べて、別のないようにしても同じようにプログラムがそのまま表示されてしまいます。 どなたか教えてください。 宜しくお願いします。

  • (Perl)ReadParseによるハッシュへの格納について

    PerlのReadPerseについて質問させてください。 以下少々長いですが、過程を書きます。 <form>タグにより、入力フォームのページをHTMLで作成したとします(form.html)。 その際、<form method="post" action="form.cgi"> と入力しておいて、別途form.cgiを作成するとします。 form.htmlには、<form>タグ内のname属性で、それぞれ'weight' 'height' 'age'という三種類のデータを入力してもらって、取得するようにしています。 そして<input type="submit" value="登録">による、 登録ボタンを押すことで、 form.cgiに処理をさせるようにしています。 form.cgiの中身ですが、まず、最初の三行を書きます。 #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); となるのですが、わからないのが、 三行目の &ReadParse(*form); です。 サブルーチンReadParseを引数*formで、 cgi-lib.plから呼び出しているということはわかるのですが、いきなり*formという形で、ハッシュを登場させているあたりがわかりません。(この際、ハッシュ名の前の%を*に変えなければならないことは、一応知っております。理由はわかりませんが。) そこで質問なのですが、 いきなり、ハッシュであるformを登場させていいものなのでしょうか?? 以下、form.cgiの内容です。 #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); $name=$form{'weight'}; $sex=$form{'height'}; $megane=$form{'age'}; print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "体重:${weight}<br>\n"; print "身長:${height}<br>\n"; print "年齢:${age}<br>\n"; print "</body>"; print "</html>"; _END_

    • ベストアンサー
    • CGI
  • 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のみダメなのでしょうか?

    • ベストアンサー
    • Perl
  • jcode.pl と &ReadParse()

    CGIファイルの先頭は #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; &ReadParse(); という感じになっています。 ここでのの require は、日本語を使うためのもの だと思っています。合っていますか? &ReadParse() というのは何ですか? require と関係があるみたいです。 require を書かずに &ReadParse() を書くとCGIエラーになります。

    • ベストアンサー
    • CGI
  • Perl 書き込み行の順番、読み込み

    #!/usr/bin/perl require "cgi-lib.pl"; print "Content-type: text/html\n\n"; ############ 書き込み ############# $file = "sample.txt"; print qq! <font size="1">コード入力<form method=POST action="./houkoku.cgi"> <input type="text" name="rank"> <br><br> <input type="submit" value="送信"> </form>!; use CGI; $query = CGI->new; $rank = $query->param('rank'); open( WRITE, ">> $file" ); print WRITE"$rank\n"; close ( WRITE ); ############ 読み込み ############# print "<table border=1>"; open( READ, "<$file" ); $adam = <READ>; while( $adam = <READ> ) { chomp ( $adam ); @column = split(",",$adam); print "<tr><td>@column[0]</td></tr>"; } close(READ); __END__ のようにして、送信されたものを表示していくようにしたいのですが、 新しい書き込みが下段に追加されてい行きます。 新しいものを上段へ表示したいのですが、 どのようにしたら良いでしょうか? sample.txtにも、新しいものが下に記入されています。 上段への書き込みのやりかたをご教授いただけたらと思います。、 よろしくお願いします。

    • ベストアンサー
    • Perl
  • CGIでフォームからの入力内容を表示されない。

    初歩的な質問ですみません。 自宅サーバを使っています。 ■ActivePerl 5.8.8 Build 822 ■httpd142p ------------------------------ ■httpd142p ┗■cgi-bin  ┣■cgi-lib.pl  ┣■test.cgi  ┗■test.html ------------------------------- CGIは動作します。 一行目のパスもあっています。 --------------------------- 【test.cgi】 #!C:/perl/bin/perl #require './cgi-lib.pl'; #&ReadParse(*MYDATA) print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<TITLE>RESULT</TITLE>\n"; print "<BODY>\n"; print "氏名 = $MYDATA{'simei'}\n\n"; print "住所 = $MYDATA{'jyusyo'}\n"; print "</BODY>\n"; print "</HTML>\n"; exit; -------------------------------- 【test.html】 <HTML> <HEAD> <TITLE>TEST</TITLE> </HEAD> <BODY> <P> <FORM ACTION="test.cgi" METHOD="POST"> 氏名:<INPUT TYPE="text" NAME="simei"> 住所:<INPUT TYPE="text" NAME="jyusyo"> <INPUT TYPE="submit" VALUE="送信"> <INPUT TYPE="reset" VALUE="リセット"> </P> </FORM> </BODY> </HTML> ---------------------------------- ■実行結果 氏名 = 住所 = ---------------------------------- どなたかご教授ください。

    • ベストアンサー
    • CGI
  • ファイルのアップロードとログ

    今日はいつもお世話になっています。 ファイルをアップロードをする際についでにログに名前やアドレス、ファイル名をログに 保存したいなと思っているのですが、なかなかうまくいきません・・・ ファイルをアップロードすることは出来たのですがほかの内容をうまくCGIに渡せなくって 困っています。 どうか宜しくお願いいたします。 use lib './lib'; use CGI_Lite; require 'lib/util.pl'; require 'pl/cgi-lib.pl'; require 'pl/jcode.pl'; $Title = 'ファイルのアップロード サンプル'; $Temp = 'tmp'; $Platform = 'Unix'; $BUFSZ = 2048; $CharSet = 'Shift_JIS'; $upload = new CGI_Lite; $upload->set_directory($Temp) or exitError(" $Temp がオープンできません。"); $upload->set_platform($Platform); $upload->set_buffer_size ($BUFSZ); $filename = $upload->filter_filename(\&convName); $upload->close_all_files; %data = $upload->parse_form_data; if ($upload->is_error()) { exitError($upload->get_error_message());} &ReadParse( *answer ); $num = $answer{'num'} $nam = $answer{'nam'}; $mai = $answer{'mai'}; $file = $answer{'file'}; print <<"EOL"; <HTML><HEAD><TITLE></TITLE></HEAD> <BODY> 整理番号  :$num<br> 名前    :$nam<br> アドレス  :$mai<br> 添付ファイル:$file<br> </BODY> </HTML> EOL exit(0);

    • ベストアンサー
    • CGI
  • ReadParseを使ってのバイナリファイルのアップロード

    ファイルをアップロードするCGIを作ろうと思い、以下のように書いてみました。そうしたところテキストファイルのアップロードには成功しましたが、バイナリファイルだとアップロード出来ても開けなかったり、画像が崩れてしまったりしてしまいました。 何故バイナリファイルだとアップロードが失敗してしまうのかわかりません。どこを直せば良いのでしょうか。 よろしくお願いします。 ----------------------------------------------- フォーム <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="xxx.pl"> <INPUT TYPE="file" NAME="file"> <INPUT TYPE="submit" VALUE="アップロード"> </FORM> ------------------------------------------------ xxx.pl &ReadParse(*in, *f_name, *f_type); $f_name{'file'}=~/([^\\\/]+)$/; $filename = $1; open(IN, ">$filename"); print IN $in{'file'}; close(IN);

    • ベストアンサー
    • CGI

専門家に質問してみよう