萌えPerl
しきり線
ハッシュたん
 うぃっす。あたしハッシュたん。ここからはあたしが説明するよ。
 ヨロシクっす。
大項目 ディレクトリ
 ディレクトリを操作する関数として以下のものがあります。

関数構文説明
opendiropendir(ディレクトリハンドル,ディレクトリ)ディレクトリを開きます。
readdirreaddir(ディレクトリハンドル)その中のファイル一覧。
closedirclosedir(ディレクトリハンドル)開いたディレクトリを閉じます。
mkdirmkdir(ディレクトリ,モード)ディレクトリを生成します。
rmdirrmdir(ディレクトリ)ディレクトリを削除します。

 だいたいopendirとclosedirはセットで使います。
 ディレクトリとはファイルの位置を表す文字列です。
 Windowsならフォルダーと言う方が馴染み深いかもです。

 ディレクトリハンドルとは「今開いているディレクトリ」を区別するために一時的につ ける名前です。変数みたいな使い方をします。$はいりませんが習慣的に大文字を使います。
 プログラムごとに好きな名前を付けてかまいません。

 ファイル一覧を表示する例。

#!c:/perl/bin/perl
opendir(DIR,"."); # ←"."で自分のいる位置を表しています。
@file = readdir(DIR);
closedir(DIR);
print "Content-type: text/html; charset=Shift_JIS\n\n";
for (@file){print "$_<br>";}

.
..
test.cgi
uke01.cgi
uke02.cgi
uke03.cgi

 ディレクトリを作る例。

#!c:/perl/bin/perl
mkdir ("nanika", 777);
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "おk";

おk

同じディレクトリに nanika というフォルダーができます。
(デフォルトならC:\Program Files\Apache Group\Apache2\cgi-bin)

 ディレクトリを削除する例。

#!c:/perl/bin/perl
rmdir ("nanika");
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "おkおk";

おkおk

さっき作ったフォルダー nanika が消えます。

中項目 パーミッション
ハッシュたん
 上の例で mkdir ("nanika", 777); の 777 ですが、これはモードとかパーミッション とか権限とか属性などと呼ばれています。
 Windowsでは馴染み薄いですが、プロバイダーにCGIをアップするときには重要です。
 これは何かというと、そのディレクトリやファイルに対して誰にどの程度の自由が許さ れるかというしるしです。

 制限項目は3つで「読込可能」「書込可能」「実行可能」です。
 対象者も3つで「所有者」「グループ」「その他」です。

表にするとこんな感じ。
所有者グループその他
読込可・不可可・不可可・不可
書込可・不可可・不可可・不可
実行可・不可可・不可可・不可

 今、手元のWindowsパソコンで動かしているcgiファイルは全て可能ですが、インターネ ットで公開するときにはある程度の制限をかけておくのがセキュリティー上好ましいので、 設定できるようになっています。
 さて、これを数値で表現するわけなのですが、以下のルールにのっとって導きます。

・左から「所有者」「グループ」「その他」の権限を表します。
・読込可なら 4を足します。
・書込可なら 2を足します。
・実行可なら 1を足します。

 というわけで、
 例えば777なら誰でも好きにできるディレクトリやファイルです。700なら所有者 しか触れません。
 よく使うのは、プログラムファイルなら755で、誰もが読み込みと実行はできるが編 集は所有者しかできません。それとデーターファイルが666で、これは誰もが読み書き できるというものです。あとモジュールは644で誰もが読み込みだけはできて所有者だ けが編集もできるというもの。ですかね。一概には言えないので考えて設定してください。

 パーミッションを変えるには以下のようにします。

chmod パーミッション,ファイル

 パーミッションはあたまに0をつけて4ケタにします。
 (ex. chmod 0777,"test.txt"; )
 パーミッションの変更は実行権限に影響されるので、もともとのファイルに対して変更 する権限がなければなりません。
 ブラウザーから実行したCGIで作成されたファイルに対してはブラウザーから実行す るCGIでパーミッションを変更することができます。
(これがFTPソフトで転送したり、コマンドで生成されたファイルとかだったら権限違 いでお互い干渉できないことがあります)

 所有者(オーナー)を変えるには以下のようにします。

chown ユーザID,グループID,ファイル;

 ユーザIDとグループIDは数値表現でなければなりません。
 これは以下のようにして求めます。

(ユーザがapacheの場合) my($gname,$passwd,$uid,$gid,$quota,$comment,$gcos,$gdir,$shell) = getpwnam 'apache';

 $uid がユーザID、$gid がグループIDです。
 (ex.chown $uid,$gid,"test.txt";)