![]() |
| カレッヂ |
質問者 とんちん
投稿日 2006/11/1(水) 17:35:34
社内ヘルプページを作成しています。 サイト内検索をかけるため、静的なページとして 所定のフォルダに保存する必要があります。 ページの追加をサポートの方でもできるように 入力フォームとして開放して、新しいページをどんどん追加 できるようにしたいと考えています。 入力フォームから項目を打ち込み送信ボタンを押せば htmlファイルが生成され、所定のフォルダに保存されるような プログラムはできるのでしょうか? 当方、cgiを熟知しているわけではありませんので、 お薦めのcgiプログラムがあれば、カスタマイズできるのでは ないかと考えています。 アドバイス よろしくお願いいたします。
【習熟度】多少の改造ができる |
回答者 通りすがり
[削除]
投稿日 2006/11/7(火) 17:10:17
こんなのいかがでしょう?
==構成==
html:生成したHTMLファイルを格納するディレクトリ
index.html:入力フォーム
make_html.cgi:HTMLファイルを生成するCGI
temp.html:生成するHTMLファイルのテンプレート
エラーケースの処理やクロスサイトスクリプティング、改行コードを<br>に変換など
その他モロモロは追加してください。
▼▼▼index.html▼▼▼
<html>
<head>
<title>HTML生成入力フォーム</title>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
</head>
<body>
投稿内容を入力してください。
<form action="./make_html.cgi" method="post" name="frm1">
<table>
<tr>
<th>投稿者</th>
<td>:</td>
<td><input type="text" name="txt_name"></td>
</tr>
<tr>
<th>タイトル</th>
<td>:</td>
<td><input type="text" name="txt_title"></td>
</tr>
<tr>
<th>内容</th>
<td>:</td>
<td><textarea rows="6" name="txt_contents"></textarea></td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="submit" value="HTML生成">
<input type="reset" value="キャンセル">
</td>
</tr>
</table>
</form>
</body>
</html>
▼▼▼make_html.cgi▼▼▼
#! /usr/bin/perl
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $cgi = CGI::new();
print "Content-type:text/html\n\n";
$temp_name= './temp.html';# テンプレートファイル
$html_dir= './html/';# 生成したHTMLファイル格納ディレクトリ
my $txt_name= $cgi->param('txt_name');# 投稿者
my $txt_title= $cgi->param('txt_title');# タイトル
my $txt_contents= $cgi->param('txt_contents');# 内容
&MakeHTML();
print <<"HTML";
<html>
<head>
<title>完了</title>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
</head>
<body>
HTMLファイルを作りました。。。
</body>
</html>
HTML
exit;
sub MakeHTML {
my @temp_array= &ReadFile($temp_name);
my $h_str= "";
for (my $i=0; $i<@temp_array; $i++){
$temp_array[$i]=~ s/<!-- txt_name -->/$txt_name/;# 投稿者
$temp_array[$i]=~ s/<!-- txt_title -->/$txt_title/;# タイトル
$temp_array[$i]=~ s/<!-- txt_contents -->/$txt_contents/;# 内容
$temp_array[$i].= "\n";
$h_str.= $temp_array[$i];
}
my $file_name= $html_dir . &GetDate . '.html';
open(MakeHTML, ">${file_name}");
print MakeHTML $h_str . "\n";
close(MakeHTML);
}
sub ReadFile{
my ($file_name) = @_;
my @rtn_str = ();
my $list_idx = 0;
if (-e $file_name){
#-- ファイル読込み
open (READIPFILE , "${file_name}");
flock (READIPFILE , 2);
while(<READIPFILE>){
$rtn_str[$list_idx] =$_;
chomp $rtn_str[$list_idx];
$list_idx++;
}
flock (READIPFILE , 8);
close (READIPFILE);
}
return @rtn_str;
}
sub GetDate{
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon+= 1;
sprintf("%04d%02d%02d%02d%02d%02d", $year,$mon,$mday,$hour,$min,$sec);# yyyymmddhhmmss
}
▼▼▼temp.html▼▼▼
<html>
<head>
<title>Template</title>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
</head>
<body>
<hr>
投稿者:<!-- txt_name --> <br>
タイトル:<!-- txt_title --> <br>
<hr>
内容<br>
<!-- txt_contents -->
</body>
</html> |
質問者 とんちん
[削除]
投稿日 2006/11/7(火) 19:04:03
通りすがりさん ありがとうございます。 まさにこんなプログラムです。。(感激) サーバーに設置もできました。 あとはこちらでカスタマイズさせていただきます。 cgiの腕があまりありませんので助かりました、 とても便利なシステムができるように思います。 ありがとうございました。 |
このページは終了したので返信(回答)は書きこめません
| Web裏技 |