POST形式でファイルを送ると、CGIモジュールでエラーが出ます。
ファイルを添付できるメールフォームを作ろうと思いました。
まず呼び出し側のHTMLファイルを以下のようにしました。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form action="./filemail.cgi" method="post" enctype="multipart/form-data">
<input type="file" name="file-1"><br />
<input name="submit" type="submit" value="送信">
</form>
</body>
</html>
しかし受け手のCGIの方でエラーが出ます。
エラー原因を調べるためプログラムのコードをとことんまで削りました。
#! usr/bin/perl -d
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
our $q=new CGI; ・・・A
print $q->header(-charset=>'utf-8'),
$q->start_html(-charset=>'utf-8',
-lang=>'ja-JP'),
"うまくいった~~^^v\n",
$q->end_html;
それでもエラーが出ます。エラー箇所はAの
our $q=new CGI;
です。
エラーメッセージは
Software error:
CGI open of tmpfile: No such file or directory
です。
ちなみにコードを削りまくったこのプログラムはフォームデータとまるで関係ないので、ブラウザのURL窓にURLを手入力して呼び出してみました。
http://127.0.0.1//filemail.cgi
これは目出度く正常に動作します。
うまくいった~~^^v
またファイルを添付せずにフォームの送信ボタンをクリックしても正常に動作します。
そしてファイルを添付しても、フォームの送信方法をPOSTではなく、GETにしたら正常に動作します。
要するに、フォームの送信方法がPOSTの場合に、ファイルを添付して送信ボタンをクリックすると前述のエラーが出ます。
エラーメッセージからしてCGIモジュールで何か問題が起きているのですが、CGIモジュールとPOSTによるファイル送信は相性が良くないのでしょうか。それとも何か他にやるべきことがあるのでしょうか。
お手数をお掛けします。
お礼
返信ありがとうございます。 今日試して見ましたが、うまくいきました。URLの後に?をつけて、2つ目以降は&をデリミッタにすればよかったです。 ご迷惑をおかけしました。 ありがとうございました。