AutoIndexというファイルマネージャを使ってみた

(2009/1/29追記:ディレクトリ作成を管理者以外ができるようにしてみた。他にディレクトリインデックスの文字化けについて、参考になりそうなリンクを2つ←検索でいらした方向け

追記終わり)

AutoIndex PHP Script (Website Directory Indexer)(Version 2.2.4(PHP 5用)2007-Nov-09リリース)
急に必要になったので、それほど詳しく調べたわけではないが、PHPで記述されていること、機能が一通り揃っていることなどで、使ってみることにした。
以下、使い勝手の面で気づいたこと、対処したことなどのメモ

日本語化のためのファイルが化けていた

Sourceforgeで閲覧すると問題ないのだが、tar玉を解凍してできる./language/ja.txtのファイルが文字化けしているため、言語設定でjaを選択しても、画面が文字化けしまくる。最初はPHPの日本語化の設定がまずかったのかと思ったが、そうではなかった。
もともとのファイルはUTF-8だったようだが、パッケージするサーバへFTPの際に7bitモード(ASCII)で転送してしまったのだろうか?
とりあえず、Sourceforgeのサイトで以下のURLで表示されるページ内容をUTF-8で保存して使えばOK
http://autoindex.sourceforge.net/languages2/ja.txt

.htaccessBASIC認証しているディレクトリの扱いがうまく行かない

ユーザ名、パスワードを正しく入力しても、認証ダイアログがまた表示されてしまう。原因はわからなかったので、設定ファイル(./AutoIndex.conf.php)で

parse_htaccess  false

とした。
最初の設定の画面(英語)でも、parse .htaccessという項目があるので、それをオフにしておけば良かったようだ。(でも、急いでいたので気づかなかった)

ファイルの上書きができない

一度削除すればいい、というのは手間がかかりすぎるし、複数のファイルを更新したい場合にはミスの元だろう。
これは./classes/Update.php をパッチした。というか、問答無用で上書きである(汗

66,72c66,71
< #                     if (@file_exists($fullpathname))
< #                     {
< #                             $errors .= "<li>$filename ["
< #                             . $words -> __get('file already exists') . ']</li>';
< #                     }
< #                     else if (@move_uploaded_file($file_upload['tmp_name'], $fullpathname))
<                       if (@move_uploaded_file($file_upload['tmp_name'], $fullpathname))
---
>                       if (@file_exists($fullpathname))
>                       {
>                               $errors .= "<li>$filename ["
>                               . $words -> __get('file already exists') . ']</li>';
>                       }
>                       else if (@move_uploaded_file($file_upload['tmp_name'], $fullpathname))

管理ユーザ以外はファイルの削除ができない

ユーザのモードとして、BANNED(出入り禁止), GUEST(閲覧のみ), USER(アップロードのみ), MODERATOR(パスワードを変更できる、FTPできる)、ADMIN(ユーザアカウント作成、管理、ファイル削除など)があるが、ファイルの削除がADMINのレベルでしかできないのはイマイチだと思われた。
ADMINはアカウント管理だけが追加特権としてあるべきで、コンテンツ管理の全権を握るユーザ設定が無いのが困りものだ。
対応としては、ADMINユーザのうち、ユーザ名がadminでないものはアカウント管理ができないようにしてみた。

945,946c945
<               // 変更箇所
<               if (($this -> level >= ADMIN) && ($this -> username == "admin")) $str = '
---
>               if ($this -> level >= ADMIN) $str = '
978c977
<               if (($this -> level >= MODERATOR) && ($this -> username == "admin")) $str .= '
---
>               if ($this -> level >= MODERATOR) $str .= '