HTML::Templateは、シンプルで高速なループ構造を表現するのに適したテンプレートエンジン。テンプレートファイルでは変数を入れるために以下のタグが使用できる。
<TMPL_VAR> <TMPL_LOOP> <TMPL_INCLUDE> <TMPL_IF> <TMPL_ELSE> <TMPL_UNLESS>
HTML::Template - CGI スクリプトから HTML テンプレートを使うための Perl モジュール
HTML::Template.pm
テンプレートエンジンとは、テンプレートと呼ばれるHTMLページのひな形をプログラムからデータを渡し合成した結果をHTMLページとして出力するためのライブラリのことで、テンプレートエンジンを利用することで、プログラムのロジックとWebページのデザインを分離することができるため、プログラマーとWebデザイナーの分業が可能になる。
Webアプリケーションの開発においてはテンプレートエンジンの使用が標準的になっており、多くのWebアプリケーションフレームワークでその一部となっている。
Perlで利用できるテンプレートエンジンには、Template Toolkit(TT)、HTML::Templateなどがある。
テンプレートエンジン
60行で作るPHP用テンプレートエンジン
40行で作るPerl用テンプレートエンジン
[perl] TTより5倍速い?テンプレートエンジン"Tenjin"を試す
Pure JavaScript Template Engine
Linux および Unix システム上で安全なプログラムを書く際に必要となる設計や実装について、そのガイドライン。遠隔のデータを見るためのビューアーや Web アプリケーション(CGI スクリプトを含む)、ネットワーク・サーバ、setuid や setgid してあるプログラムが対象。CやC++、Java、Perl、PHP、Python、TCL、Ada95 の個別ガイドラインも掲載されている。
Secure Programming for Linux and Unix HOWTO
オンラインショップの商品が注文された際に顧客に注文内容の確認メールを送信したり、掲示板にコメントが書き込まれた際に管理人宛てに通知メールを送信したりするには、フォームで入力された項目の内容をCGIからメールとして送信する必要が
あります。
一般的なレンタルサーバーでCGIからメールを送信する場合の基本的な処理手順は次のようになります。
1.フォームから入力された各項目の値をパラメータから取得
2.subject(件名)をMIME-Base64形式に変換
3.メッセージを作成
4.メール送信する文字列の文字コードをJISに変換
5.sendmailを使用してメールを送信
下記のCGIスクリプト(UTF-8)はレンタルサーバー等で利用可能なsendmailを使用してフォームから入力された、Subject、宛先メールアドレス、差出人、本文を使用してメールを送信するサンプルプログラムです。
--- mailform.html (入力フォーム) ---
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>メールフォーム</title>
</head>
<body>
<h1 class="title">メールフォーム</h1>
<form method="post" action="sendmail.cgi">
<input type="hidden" name="a" value="exec">
件名(Subject) :<br />
<input type="text" name="subject" size="80" value=""><br />
宛先(To) :<br />
<input type="text" name="to" size="80" value=""><br />
差出人(From) :<br />
<input type="text" name="from" size="80" value=""><br />
本文(Body) :<br />
<textarea name="body" rows="10" cols="65"></textarea><br />
<p>
<input type="submit" value="送信">
</p>
</form>
</body>
</html>
--- sendmail.cgi (メール送信CGI) ---
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use Encode;
my $cgi = CGI->new();
# パラメータからフォームの入力値を取得
my $subject = $cgi->param('subject');
my $to = $cgi->param('to');
my $from = $cgi->param('from');
my $body = $cgi->param('body');
# subject(件名)をMIME-Base64形式に変換
$subject = Encode::encode('MIME-Header-ISO_2022_JP', $subject);
# メッセージを作成
my $message = <<"END_MESSAGE";
From: $from
To: $to
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
$body
END_MESSAGE
# メール送信する文字列の文字コードをJISに変換
Encode::from_to($message, 'utf8', '7bit-jis');
# sendmailを使用してメールを送信
my $sendmail_path = '/usr/sbin/sendmail'; # sendmail path
open my $mailh, "| $sendmail_path -t -oi $to";
print {$mailh} $message;
close $mailh;
# 送信終了を表示
my $html = <<"END_HTML";
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>送信終了</title>
</head>
<body>
<p><big>送信終了</strong></big></p>
</body>
</html>
END_HTML
print "Content-Type: text/html\n\n", $html;
なお、フォームからのパラメータの受け取りにはCGIモジュールを、メール本文の文字コードの変換やsubject(件名)の
MIME-Base64形式への変換にはPerl 5.8以降では標準モジュールなっているEncodeモジュールを使用しています。
また、このサンプルでは、処理手順をわかりやすくするために、入力チェックなどの実際に運用する場合に必要な処理を行ってませんが、入力チェック処理も含まれたより実用的なシンプルなメールフォームCGIの無料配布(ライセンスはGPL)も行っていますので、よろしければご活用ください。
PerlのプログラムからDBI経由でMySQLに接続し、SELECT文でデータを取得する処理のサンプルプログラムです。
あらかじめphpMyAdminを使用してMySQLにテータベース「testdb」を作成し、以下のSQLを実行しテーブル「users」を作成、3件のレコードを登録しておきます。
CREATE TABLE `users` (
`userid` varchar(100) COLLATE utf8_bin NOT NULL,
`password` varchar(250) COLLATE utf8_bin NOT NULL,
`status` int(11) NOT NULL,
`auth` int(11) NOT NULL,
`username` varchar(250) COLLATE utf8_bin NOT NULL,
`address` varchar(250) COLLATE utf8_bin NOT NULL,
`mailaddr` varchar(100) COLLATE utf8_bin NOT NULL,
`hpurl` varchar(250) COLLATE utf8_bin NOT NULL,
`widgets` text COLLATE utf8_bin NOT NULL,
`createdate` datetime NOT NULL,
`lastupdate` datetime NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
insert into `users` (`userid`,`password`,`status`,`auth`,
`username`,`address`,`mailaddr`,`hpurl`,`widgets`,
`createdate`,`lastupdate`)
values('admin','1234','1','0','webmaster','',
webmaster100@59log.com','http://59log.com/','',now(),now());
insert into `users` (`userid`,`password`,`status`,`auth`,
`username`,`address`,`mailaddr`,`hpurl`,`widgets`,
`createdate`,`lastupdate`)
values('test1','5678','1','1','user 1','',
'test1@59log.com','http://59log.com/','',now(),now());
insert into `users` (`userid`,`password`,`status`,`auth`,
`username`,`address`,`mailaddr`,`hpurl`,`widgets`,
`createdate`,`lastupdate`)
values('test2','abcd','1','1','user 2','',
'test2@59log.com','http://59log.com/','',now(),now());
以下のPerlプログラムでは、テーブル「users」からステータスが1のレコードを全て取得、一旦配列に格納してから標準出力に出力しています。
検索条件の設定にはプレースホルダを使用し、DB処理でエラーが発生した場合は、例外処理に飛んでエラーの内容が出力されるように、RaiseErrorに1を設定しています。
--- mysql_select.pl ---
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $data_source = "DBI:mysql:testdb"; # 接続先はtestdb
my $username = "test"; # データベースへのアクセス権限を持つユーザーを指定
my $password = "abcd"; # そのパスワード
my $status = 1;
my @recs = ();
eval {
my $dbh = DBI->connect($data_source, $username, $password,
{RaiseError => 1, PrintError => 0});
my $sql = "select * from users where status = ?";
my $sth = $dbh->prepare($sql);
$sth->execute($status);
while (my @rec = $sth->fetchrow_array) {
push @recs, [@rec];
}
$sth->finish;
$dbh->disconnect;
};
if ($@) {
print "Error : $@\n";
}
foreach my $rec (@recs) {
print join(",", @{$rec}), "\n";
}
無料で配布している掲示板CGI(59bbsとは別の簡易掲示板CGIをバージョンアップしました。
HTML::Templateを使用してUIの部分をできるだけプログラムから取り除き、テンプレートファイルで記述するように変更しました。これによってページデザインのカスタマイズがより簡単になると思われます。
なお、機能については特に変更はありません。
掲示板CGI
「さくらのレンタルサーバ」は、さくらインターネットが提供している個人向けレンタルサーバーサービスで最も料金の安い「ライト」は月額125円(1年契約の場合)から利用できる。
月額125円の「ライト」では、PHPやMySQLの利用は出きないが、データベースを必要としないPerl、Ruby、PythonのCGIであれば動作させることが可能。
また、インストール作業なしにレンタルサーバのコントロールパネルから設定するだけでブログを作成することできる「さくらのブログ」という機能があり、さくらインターネットでドメインを取得すると独自ドメインでの
運用も可能。利用料金は月額125円/1Gなので、有料のブログサービスを利用するより安く独自ドメインのブログを作成することができる。
さらに、月額500円の「スタンダード」プランではPHPやMySQLの利用も可能で、オープンソースのブログソフトのWordPressやMTOS(Movable Type Open Source)のインストールも簡単にできる。
さくらのレンタルサーバ
Ruby(ルビー)とは、まつもとゆきひろ氏によって開発されたオブジェクト指向のスクリプト言語のことで、Perlに匹敵する強力なテキスト処理能力とシンプルな文法などを特長とする。
David Heinemeier Hansson氏によって開発された優れたWebアプリケーションフレームワーク「Ruby on Rails」の出現によって、Webアプリケーション開発においても人気の高い言語になっている。
オブジェクト指向言語Ruby
オブジェクト指向のスクリプト言語 Rubyのサイト。ダウンロード、リファレンスマニュアル、FAQ、メーリングリストなど。
Ruby on Rails
オブジェクト指向スクリプト言語「Ruby」向けのオープンソース(MIT license)のWebアプリケーション開発フレームワーク。
Rubyアソシエーション
Ruby関連のプロジェクトやコミュニティ、ビジネスの関係を強化し、エンタープライズ領域におけるRubyの利用に関する諸問題の解決に取り組むことを目的とする合同会社。理事長はRuby開発者のまつもとゆきひろ氏。
日本Rubyの会
Rubyの利用者の支援、Ruby(+Rubyのライブラリ)開発者の支援を目的とした任意団体。
逆引きRuby
Rubyを使ってやりたい事から、その方法を調べられる逆引きリファレンス。
Ruby(Japanese)
Rubyのスクリプト集。
Rubyコーディング規約
Rubyのコーディング規約の雛型。
Ruby Draft Specification
IPAがJIS規格として標準化を進めているオープンソースのプログラミング言語「Ruby」の標準化仕様のドラフト(英語)。
Ruby のサンプルプログラム投稿サイト
Ruby のサンプルプログラムを登録、閲覧をするためのサイト。
プログラミング言語 Ruby
オライリージャパン 著者:まつもと ゆきひろ,David Flanagan 価格:3,990円 評価:★★★★★
- 最も信頼できるRubyの本 ★★★★★
- 基本書にふさわしい本 ★★★★★
- rubyマスターになるために ★★★★★
- 鬱にされる鬱然たるRuby教科書 ★★★
- For Rubist ★★
powered by
amalink