こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アップローダがうまく作れない

アップローダを作成しています。
しかしなぜか受け取る側の.plでファイルが見つからず、開けません。
HTMLと.plのソース付けときますので間違えの指摘お願いします

<table border="0">
<form action="./UpShori.pl" method="post">
<tr><th><Div Align="right">アップするファイル</th><th><Div Align="left"><input type="file" name="file" size="39"></th></tr>
<tr><th><Div Align="right">ファイルの説明</th><th><Div Align="left"><input type="text" name="setumei" size="50" maxlength="45"></th></tr>
</table><br>
<input type="submit" value="アップロード">

--受け取るUpShori.pl---
#!c:/Perl/bin/Perl.exe
print"Content-type: text/html\n\n";


$Data;
@DataBunkai;
$UpFileName;
@UpFileData;

read(STDIN,$Data,$ENV{'CONTENT_LENGTH'});
@DataBunkai = split("=","$Data");

@DataBunkai = split("&","$DataBunkai[1]");

$UpFileName=$DataBunkai[0];

# ここで”ファイルがありません”と出力される
open(READ,"<","$UpFileName") or die print"ファイルがありません";
@UpFileData=<READ>;
close(READ);

# ↓の生成されるファイル名は気にせずお願いします。
open(WRITE,">","0000");
print WRITE"@UpFileData";
close(WRITE);

print<<End_Of_Program;

End_Of_Program

投稿日時 - 2007-07-07 18:58:22

QNo.3147494

困ってます

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

こんにちは、
アップロードを行うCGIを書く際に、
どうしても使用できない場合以外、
CGI.pm もしくは類似のモジュールを使用せずに書くのは、
時間の無駄でしょう。

以下のURLのページを参考にして下さい。
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
(CGI.pm の日本語PODです。)

あわせて、googleにて"Perl アップロード"で検索したら、トップにきたページです。
http://www.ss.iij4u.or.jp/~somali/web/_perl_upload.html
丁寧に詳しく書いてあるので参考になると思います。

でも、アップロードには色々とセキュリティ的な問題があるので、
十分に吟味してください。

投稿日時 - 2007-07-08 00:22:27

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

W_H

とある自分の答えの使いまわしで悪いのですが……。
<form action="CGIアドレス" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="アップロード">
</form>
というHTMLタグでデータを送った場合を仮定します。
ちなみに、formタグの、[enctype="multipart/form-data]がないと、正常に動きません。実行してないので分かりませんが、もしJIF0131さんのソースでアップロードできるとしても、あの一文が書かれてないので、絶対にファイルは見つかりません。

ここからソースです。
use CGI;#CGIモジュール使用宣言
$query = new CGI;
$file =$query->param('file');#デコード。
#$変数 = $query->param(フォームパーツの名前);で読み込める

$newfile="0000";#ファイル名。今回は0000

open(FILE, ">$newfile") || die "error";
binmode(FILE);#アスキー以外のバイナリデータの場合必要
binmode(STDOUT);#アスキー以外のバイナリデータの場合必要
while (<$file>) {print FILE $_;}
close(FILE);

これが多分一番楽かと思われます。ただ、ファイルの作成と言うのは、いろいろと内容によって大変なので、がんばってください。

投稿日時 - 2007-07-08 16:30:01

あなたにオススメの質問