AutoIndexというファイルマネージャを使ってみた
(2009/1/29追記:ディレクトリ作成を管理者以外ができるようにしてみた。他にディレクトリインデックスの文字化けについて、参考になりそうなリンクを2つ←検索でいらした方向け
- autoindexのファイル一覧がISO-8859-1で化ける件 - exlair's diary (hatenablog)
- apache の mod_autoindex が ISO-8859-1 になってカオス - woremacxの日記
追記終わり)
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
.htaccessでBASIC認証しているディレクトリの扱いがうまく行かない
ユーザ名、パスワードを正しく入力しても、認証ダイアログがまた表示されてしまう。原因はわからなかったので、設定ファイル(./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 .= '