| 外部ファイルの入出力 |
入力画面
新規作成後の画面
編集画面
[サンプルプログラムの実行]
<TEXTAREA>タグでテキストを表示する際には、テキスト中にHTMLタグが含まれている場合があるので'<'を'<'に変換しておきます。'<'で表示した'<'はCGIに戻ってくるときには'<'になっていますので、入力の際の変換処理は不要です。
また、SJIS では '書き込み可能' の '能' の下位バイトがバックスラッシュ(\)のコードと一致しているので'能'の後には空白文字を入れておきます。詳しくは「日本語コードの取り扱い」の項を参照してください。
#!/usr/bin/perl
#
# fileio.cgi
#
# (C)1999 Kaoru Fujita
#
use lib './lib';
require 'util.pl';
#
# 定数
#
$Title = '外部ファイルの入出力サンプル';
$Location = './tmp';
$CGIPath = '/cgi-bin';
use File::Basename;
$Program = basename($0);
$Encoding = 'sjis';
$CharSet = 'Shift_JIS';
parseInput($Encoding);
# テスト用
#$in{'Action'} = 'Create';
#$in{'File'} = 'abc';
#$in{'Data'} = '0123456789';
$act = $in{'Action'}; # Create/Add/Remove/Modify
$file = $Location.'/'.$in{'File'};
$data = $in{'Data'};
print qq(Content-type: text/html\n\n);
print qq(<HTML>\n);
print qq(<HEAD>\n);
print qq(<META HTTP-EQUIV="Content-Type" CONTENT="text/html\; charset=$CharSet">
\n);
print qq(<TITLE>$Title</TITLE></HEAD>\n);
print qq(<BODY>);
if ($act eq 'Create') {
if (!-e $Location) {
mkdir($Location, 0755) or
exitError("ディレクトリ $Location が作成できません。");
print qq(ディレクトリ $Location を作成しました。<BR>\n);
}
exitError("すでにファイル $file が存在します。")
if (-e $file);
open(FH, ">$file") or
exitError("ファイル $file がオープンできませんでした。");
print FH $data,"\n" if ($data);
print qq(ファイル $file を作成しました。 <BR>\n);
close(FH);
}
elsif ($act eq 'Add') {
open(FH, ">>$file") or
exitError("ファイル $file がオープンできませんでした。");
print FH $data,"\n" ;
print qq(ファイル $file に追加書き込みしました。<BR>\n);
close(FH);
}
elsif ($act eq 'Open'){
my($mode);
if (-e $file) {
if (-w $file) {
$mode = '書き込み可能 ';
}
else {
$mode = '読み込み専用';
}
}
open(FH, "$file") or
exitError("ファイル $file がオープンできませんでした。");
print qq(<P ALIGN="right">[<I>$file</I>]</P>\n);
print qq(ファイルの内容 ($mode)<BR>\n);
print qq(<FORM ACTION="$CGIPath/$Program", NAME="Form" METHOD="post">\n);
print qq(<TEXTAREA NAME="Data" COLS="80" ROWS="24">);
while (<FH>) {
s/</</g; # テキスト中のHTMLタグをエスケープする
print;
}
print qq(</TEXTAREA>\n);
print qq(<INPUT TYPE="hidden" NAME="Action" VALUE="Modify">\n);
print qq(<INPUT TYPE="hidden" NAME="File" VALUE="$in{'File'}">\n);
print qq(<INPUT TYPE="submit" NAME="Submit" VALUE="保存">\n);
print qq(</FORM>\n);
close(FH);
}
elsif ($act eq 'Modify'){
exitError("ファイル $file に書き込むことができません。")
unless (-w $file);
open(FH, ">$file") or
exitError("ファイル $file がオープンできませんでした。");
# \r\n を \n に変換する。
$data =~ s/\r\n/\n/g;
print FH $data;
print qq(ファイル $file を書き換えました。<BR>\n);
close(FH);
}
elsif ($act eq 'Remove'){
if (-e $file) {
unlink($file) or
exitError("ファイル $file が削除できませんでした。");
print qq(ファイル $file を削除しました。<BR>\n);
}
else {
print "ファイル $file は削除済みです。\n";
}
}
print qq(</BODY></HTML>\n);
exit(0);
#--End of fileio.cgi
|
<HTML>
<HEAD>
<TITLE>外部ファイルの入出力サンプル</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function doIt(act)
{
document.Form.Action.value = act;
document.Form.submit();
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM ACTION="/cgi-bin/fileio.cgi" NAME="Form">
<INPUT TYPE="hidden" NAME="Action">
ファイル名: <INPUT TYPE="textfield" NAME="File" SIZE="24"><BR>
<INPUT TYPE="button" NAME="Create" VALUE="新規作成" onClick=doIt('Create')>
<INPUT TYPE="button" NAME="Open" VALUE="編集" onClick=doIt('Open')>
<INPUT TYPE="button" NAME="Remove" VALUE="削除" onClick=doIt('Remove')>
</FORM>
</BODY>
</HTML>
|