ファイル一覧を表示する cgi

[戻る]

古い人間なので, 多くの関係者にファイルを見てもらう時, 添付メールを使うのは抵抗があります. 定常的に続く時は ftp アカウントを作りますが, 1 回だけの場合 http サーバに, どこからもリンクを張られてないように ファイルを置き, URL をメールで流してます. 特に社内の場合, samba 経由で httpd サーバにファイルをコピー だけで済むのでお手軽です. ただファイルが一個ならばいいんですが, ファイルが複数あると, メールの中に URL を列挙するとか, 適当なスクリプトでファイルを リンクで箇条書きにした html を作るとかしなければなりません.

ファイル一覧が見えるように (Forbidden にならないよう) httpd のパーミションを空けるやり方もあるとは思います. おそらく .htaccess か何かに適当にかけば目的のディレクトリだけ ディレクトリ表示を許すようになるとは思うものの, 調べるのが面倒です.

相変わらず調べるより作る方が楽だと, 次のようなスクリプトを作ってみました.

#!/usr/bin/perl

printf ("Content-type: text/html\n\n");
printf ("<html>\n<head >\n");
printf ("<title > Scan Snap < /title >\n");
printf ("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=shift-jis\" >");
printf ("< /head><body >\n");

# リストの名前などタイトル表示したいならここ

$path = $BASEDIR . ".";  # ディレクトリの位置

opendir(THIS, $path);
@all = grep(!/^\./, readdir(THIS));
closedir(THIS);

printf ("<OL>\n");
foreach $a (@all){
    if ($a=~/.pdf$/i){   # 拡張子の選択, この例では pdf だけ
	$file = $path . "/" . $a;
	printf ("<LI> < A HREF=\"%s\"> %s </A> \n", $file, $a);
    }
}
printf ("</OL>\n");

printf ("</BODY> </HTML>\n");

2008.1