※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。
■ ファイルやディレクトリ操作の命令
「CGI(Perl)の解説」では「open」命令、「flock」命令を説明しました。 それ以外のファイルやディレクトリを操作するPerlの命令でよく使いそうなものには次のようなものがあります。
- chmod()
-
ファイルやディレクトリのパーミッション(属性、権限)を変更することができます。
変更が成功したファイル(ディレクトリ)の数を返します。
※..Windowsでは利用できません。
- chown()
-
ファイルやディレクトリのオーナー(所有者)とグループを変更することができます。
変更が成功したファイル(ディレクトリ)の数を返します。
※..Windowsでは利用できません。
- mkdir()
-
ディレクトリ(フォルダ)を作成する。
- rmdir()
-
ディレクトリ(フォルダ)を削除する。
- unlink()
-
ファイルを削除する。
上記の関数は言葉で説明するよりサンプルを見てもらったほうが解かりやすいと思います。
- 【 解 説 】
-
まず、ファイル名「test.cgi」のパーミッションを「666」に変更するには「chmod」関数を使い次のように記述します。
$rslt = chmod 0666, "test.cgi";複数のファイルを一度に行う場合は、次のようにいくつかの記述方法があります。
@flist = ("test1.cgi", "test2.cgi", "test3.cgi"); $rslt = chmod(0666, @flist); $rslt = chmod(0666, "test1.cgi", "test2.cgi", "test3.cgi");同様に、ファイル名「test.cgi」の所有者を「atom」、オーナーを「admin」に変更するには「chown」関数を使い次のように記述します。
$rslt = chown("atom", "admin", "test.cgi");複数のファイルを一度に行う場合は、次のようにいくつかの記述方法があります。
@flist = ("test1.cgi", "test2.cgi", "test3.cgi"); $rslt = chown("atom", "admin", @flist); $rslt = chown("atom", "admin", "test1.cgi", "test2.cgi", "test3.cgi");新しいフォルダ「data」をパーミッション「755」で作成する場合は、「mkdir」関数を使い次のように記述します。
$rslt = mkdir("data", 0755);フォルダ「data」を削除する場合は、「rmdir」関数を使い次のように記述します。
$rslt = rmdir("data");ファイル「test1.cgi」を削除する場合は、「unlink」関数を使い次のように記述します。
$rslt = unlink("data");
上記の命令を確認するため次のようなサンプルを作ってみました。
下記のサンプルでは、随所に強制終了の「exit()」命令があります。
上から順に、「exit()」命令を削除するか頭に「#」を付けてリマークにしながら実行し、結果を確認してみてください。
なお、「可能\」の「\」マークは文字化け回避処置です。
- 【記述サンプル】
- #!/usr/bin/perl print << "END_DOC"; Content-type:text/html\n\n <HTML> <HEAD> <title>ファイル、ディレクトリ関数のテスト</title> </HEAD> <BODY> END_DOC open(FP, ">test1.cgi"); close(FP); open(FP, ">test2.cgi"); close(FP); open(FP, ">test3.cgi"); close(FP); print "作成ファイル数: 3<br>\n"; exit(); @flist = ("test1.cgi", "test2.cgi", "test3.cgi"); $rslt = chmod(0777, @flist); print "変更可能\ファイル数: $rslt<br>\n"; exit(); @flist = ("test1.cgi", "test2.cgi", "test3.cgi"); $rslt = unlink(@flist); print "削除可能\ファイル数: $rslt<br>\n"; exit(); $rslt = mkdir("test1", 0755); $rslt = mkdir("test2", 0755); print "作成ディレクトリ数: 2<br>\n"; exit(); @flist = ("test1", "test2", "test3"); $rslt = chmod(0777, @flist); print "変更可能\ディレクトリ数: $rslt<br>\n"; exit(); $rslt = rmdir("test1"); $rslt = rmdir("test2"); print "削除可能\ファイル数: 2<br>\n"; exit(); print << "END_DOC"; </BODY> </HTML> END_DOC