Perlのお勉強-#3。

 今の状態。

 フォームからアップロードできるようにした。ただし,入力値のチェックもファイルサイズのチェックもまだだから,このまま設置すると多分えらいことなんだろうな。

 ものすごく久しぶりにPerlを弄っているけど,Perlも5ってなるとmoduleとか使うとずいぶんわかりやすくなっているんだね。感心。

—html—のほう。
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html lang='ja'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title>BGMつき画像HTML生成</title>
</head>
<body>
<form action="bgm.cgiの置き場所のURL" method="post" enctype="multipart/form-data">
<p>タイトル:<input type="text" name="title" value="タイトル" size="20" /></p>
<p>キャプション:<input type="text" name="caption" value="説明" size="60" /></p>
<p>画像ファイル名:<input type="file" name="image" /></p>
<p>画像の幅:<input type="text" name="width" value="500" size="4" />ピクセル
  画像の高さ:<input type="text" name="height" value="375" size="4" />ピクセル</p>
<p>音楽ファイル名:<input type="file" name="music" /></p>
<p>背景色:<input type="text" name="back" value="#FFFFFF" size="7" /></p>
<p><input type="submit" name="submit" value="送信" /></p>
</form>
</body>
</html>

 
 
 
 
—bgm.cgi—のほう。
#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use File::Basename;
use File::Copy;

#引数格納変数
my $q = new CGI;

#ドキュメントルート
my $path = $ENV{'DOCUMENT_ROOT'};

#格納ディレクトリ
my $dir1 = "/html"; #HTMLファイル用 パーミッション705
my $dir2 = "$dir1/img"; #画像ファイル用 パーミッション705
my $dir3 = "$dir1/aud"; #音ファイル用 パーミッション705

#タイトル&キャプション
my $ttl1 = $q->param('title');
my $ttl2 = $q->param('caption');

#画像・音ファイル名
my $img1 = basename($q->param('image')); #画像ファイル名
my $img2 = $q->param('width'); #画像のwidth
my $img3 = $q->param('height'); #画像のheight
my $aud1 = basename($q->param('music')); #音ファイル名

#画像・音ファイル実体アップロード
my $fh1 = $q->upload('image');
copy ($fh1, "$path$dir2/$img1"); #サーバ上の絶対パスでないといけないようだ。
my $fh2 = $q->upload('music');
copy ($fh2, "$path$dir3/$aud1"); #サーバ上の絶対パスでないといけないようだ。

#背景色
my $img4 = $q->param('back');

undef $q;

#移動元・移動先ファイル名 File::Copyのmoveで使う。
my $from1 = "test.html";
my $to1 = "$path$dir1/bgm.html"; #サーバ上の絶対パスでないといけないようだ。

#ファイル書き込み
open(FILE, ">$from1") or die;
print FILE <<"PREVIEW";
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html lang='ja'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title>$ttl1</title>
</head>
<body bgcolor=$img4>

<p align='center'>$ttl2</p>
<div align='center'><img border='2' src='$dir2/$img1' width='$img2' height='$img3'></div>
<div align='center'><embed src='$dir3/$aud1' autostart='true' loop='false' hidden='true'></div>
</body>
</html>
PREVIEW
close(FILE);

#ファイル読み込み
open(FILE, "$from1") or die;
my @rec = <FILE>;
close(FILE);

#HTML ヘッド出力
print "Content-type: text/html; charset=UTF-8n";
print "Status: 200 OKn";
print "n";

#レコード表示
print @rec;

move($from1,$to1);

#終了
exit(0);

Comments are closed.