人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlに詳しい方
htmlのフォームから送信されたデータを、htmlファイルとして保存できるようにしようと考えています。
次の条件でお願いします。
1.ファイルを作成したあと、フォームに入力された内容の他に<html>、<body>、</body>、</html>タグ等が入る
2.(フォームの内容)+.html で保存する
回答よろしくお願いします。


●質問者: Hiroto
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● uwao

下記で動作すると思います。
クロスサイト スクリプティング脆弱性に対応するため、パスワード制限をかけています。
パスワードを知らせるのは、ご自身か自社の方など、確実に信用出来る人だけに限定する必要があります。
WEBから多くの人に送信させたい場合は、HTMLタグを無効にするような対応が必要です。

HTMLページ
<FORM action="hoge.cgi" method="post">
HTML:<INPUT type="text" name="HTML"><BR>
Filename:<INPUT type="text" name="filename"><BR>
PASS:<INPUT type="password" name="PASS"><BR>
<INPUT type="submit" value="送信">
</FORM>

hoge.cgiはこんな感じ

#!/usr/bin/perl
$password = '12345';
read(STDIN, $buff, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buff);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$in{$name} = $value;
}
print "Content-type:text/html\n\n";
print "<html><body>\n";
if($in{'PASS'} eq $password){
$htmlfile = $in{'filename'}.'.html';
open HOUT,">$htmlfile";
print HOUT "<HTML>";
print HOUT "<HEAD><TITLE>タイトル</TITLE></HEAD>\n";
print HOUT "<BODY>\n";
print HOUT $in{'HTML'};
print HOUT "<BODY>\n";
print HOUT "</HTML>\n";
close HOUT;
print "HTML作成完了!\n";
}else{
print "パスワードが違います!\n";

}
print "</body></html>\n";
exit;


Hirotoさんのコメント
ありがとうございます。

2 ● うぃんど
ベストアンサー

print の出力先を指定することでファイルに出力されます
ファイルに書き出す場合には、チェックすべきことがいろいろあるので、コードは少し長くなります
(ほかにも色々あるのですが、最低限に絞っています)

# CGIライブラリの準備
use CGI;

# 初期化
$query = new CGI;

# ファイル名設定
$filename = "sample.html";

# ブラウザへの出力
print $query->header;

# ファイルがすでに存在したらOh! No!を出力してプログラム終了
# 強制的に新しい内容に書き換えてもいいなら、ここは不要
if (-e $filename) {
 print "Oh! No!";
 exit;
}

# ブラウザではなくファイルへ出力
open(fh, ">$filename") or die("File Output Error");
print fh $query->start_html;
print fh $query->start_form(-action=>'URLを入れる' ,-method=>'post');
print fh $query->textfield(-name=>'n1', -default=>$query->param('n1'));
print fh $query->textfield(-name=>'n2', -default=>$query->param('n2'));
print fh $query->textfield(-name=>'n3', -default=>$query->param('n3'));
print fh $query->end_form;
print fh $query->end_html;
close(fh);

# 作成したファイルのパーミッション設定
# Windows上で動かす場合は不要
# Windows以外で、これを忘れると後から見れなかったり修正できなかったりする
# 0644 の部分はサーバーによる
chmod(0644, $filename) or die("Permishion Change Error");

# ブラウザへ正常終了を表示
print "congratulations";

Hirotoさんのコメント
ありがとうございます。

Hirotoさんのコメント
一度試してみました。 ファイルの保存には成功しましたが、フォームに入力されたデータの中の日本語は、正しく表示されません。対処法があればお願いします。

うぃんどさんのコメント
変更です print $query->header; ↓ print $query->header(-charset=>'Shift_JIS');

Hirotoさんのコメント
うまく日本語で表示させることが出来ました。 ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ