![]() |
カレッヂ |
質問者 とんちん
投稿日 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裏技 |