Webベースファイルマネージャを求めて

 ObModL10NWikiで日本語パッチの置き場を作成する為にWebベースのファイルマネージャを使うことを思いつきました。比較的オープンなファイルストレージみたいにするという構想です。
ファイルマネージャなんて目新しいものではなくありふれたものだと思っていた為、すぐにお目当てのものが見つかると思いきや、苦難の旅となりました。

 捜索の前にまずある程度条件を設定しました。

  1. PHPで動作し、MySQL等は使用しない事 (SQLiteはOK)
  2. アクセス制御機能がある事。ユーザー毎に異なったレベルの権限が与えられる事
  3. 日本語ファイル名には対応して無くてよいが、UTF-8で良いので日本語で書かれたテキストを編集できるとベター。UIが日本語化できたらもっと良し

(1)は自分が一番気楽に扱える言語がPHPであるからです。DBを使わないというのは、この程度の事にDBを使うまでも無いと思ったからです。こんなのにDBを使うのはオリンピック選手を小学校の徒競走に出すようなものです。(2)は無いとかなり困る機能です。もし無かったとしてもApacheによる基本認証でしのぐことは可能ですが、全か無か(アクセスできないか、フルアクセスできるか)しか無いのはちょっと困ります。せめてフルアクセス可/制限付き編集可(UPファイル種類に制限) 位の選択肢が欲しいところです。(3)は基本的に日本語ファイルは扱わないので設定したものです。そもそもWebでの非ASCII文字ファイル名はきちんとした仕様が定まっているものでは無い上、ブラウザ対応も混沌そのものだったはずなのでこれを望むのは無理というものでしょう。しかし、日本語で書かれたテキストの編集くらいは出来て欲しいところです。
このように条件を定めましたが、自分では高望みとは思っていませんでした、が…。

 まず一つ目、AjaXplorer(2.4)。
これは全ての条件を満たしています。AjaxによるUIもなかなか魅力的です。ところが、これは設置しようとしているサーバ(Coreserver)がSafe modeで動いていることとScript自体の仕様の関係で設置が出来ませんでした。
PHPではUPファイルは一旦upload_tmp_dirに保存され(場所はPHPの設定で決まる。もしこの値が設定されて無ければサーバのtmpディレクトリがそれとして使われる)、UPが終わったらこの一時ファイルをPHPのScript上の関数で任意のところにmoveするのがセオリーとなっています。ところが、CoreserverはSafe modeで動いています。ここで、PHP Scripは作成者の権限で動作しますが、それらの一時ディレクトリの所有者はrootです。Safe modeは所有者と権限が一致しない場合、その処理を弾くものです。よってPHPからはそれらのディレクトリに書き込みが出来ないことになります。ただ、ファイルアップロードに関しては例外であるようで、Safe modeでもtmpディレクトリにファイルが置かれた後にそれがuploadされたファイルかPHPが判定しているようです(move_uploaded_file)。
ここで、AjaXplorerはファイルアップが出来るか自己診断を行うのですが、これが次のようになっています。

./server/tests/test.Upload.php
----
$tmpDir = ini_get("upload_tmp_dir");
if (!$tmpDir) $tmpDir = sys_get_temp_dir();
$this->testedParams["Upload Tmp Dir Writeable"] = is_writable($tmpDir);

おそらくこの辺が原因でしょう。つまり、tmpディレクトリが書き込みできるかを確認しているわけです。たとえSafe modeであったとしても適切な設定がされていればファイルはuploadできるので、tmpディレクトリが書き込めるか否かで判定するのはちょっとルーズではあるかもしれません。多分製作者がSafemodeを想定していないのでしょう。
ここを修正すれば多分動くとは思いましたが、泥沼になりそうなのでとりあえず候補から外しました。User権限機能は余り強くないのも難点でしたし(readとwriteのflagしか与えられない)。

 次はPHP Navigator(4.38)です。
AjaXplorerの一覧表示はExplorerの詳細表示のような感じでしたが、こちらは通常のアイコン表示のような感じになっています。これもほぼ要求を満たしているのですが、問題は日本語で書かれたテキストの編集が上手く出来ないことでした。ブラウザから新規作成&保存を行うとテキストがShift_JISでなぜかきちんと保存されています。あれー?更にUser管理機構が無く、基本的に管理者のみとなっています(但しMySQLを導入すればアカウント管理は可能)。共用アカウントとして使う場合、これはちょっと怖いです。.htaccessなんか揚げられてcgi使えるようにされたら悪さのし放題です。たまったものでは有りません。

 eXtplorer(2.0.1)。これはUser管理機能もそこそこ有り、日本語で書かれたテキストの作成や編集(UTF-8)も可能でした。しかしファイルの作成/編集/uploadにファイル種別による制限を与えられないのが欠点でした(出来るか出来ないかしか選択できない)。非管理者でも編集権限を与えると全てのファイルにアクセスが出来るので何でもし放題なのです。ファイル種別制限は自前で実装できるかもしれないので取り合えず保留にしました。

 Relay(0.1 beta)。PHPやPerlと同時にMySQLも要求するのでとりあえずスルー。

 これで有名どころはおしまいのようです。海外を漁ればまだ出て来そうですが、有名どころでこの状況なので余り期待は出来ないかもしれません。正直これほどまでに選択肢が少ないものだとは思いませんでした。また、いろいろな意味で洗練が不十分なものも多い気がします(Ajaxのような外見を除き)。しかしこれはやむを無いのでしょう。セキュリティ的なリスクも高くかなり気を使わなければいけない反面、全く先進的なもので無い為、自分で1から作ろうという気になりにくいのでしょう。自分も必要に迫られたとしても作成するかといわれればかなり微妙です。

 結局Webベースファイルマネージャを利用する案は取りやめにしました。その代わり1からちょっと変わった物を作ろうかと思っています。完成するかは分かりませんけど。

 そしてどうでも良いことをメモ。
今回のようにソフトの特徴に関する情報は例えて言えばナマモノです。日々改良されその時の情報はすぐに時代遅れになるものです。世の中のblogではそのような情報も沢山扱われており、検索すると色々引っかかってうれしい限りです。しかし、そのような記事の投稿日時がデザインの関係ですぐに分からないblogがぽこぽこ有るのが気になりました。このblogのように記事のタイトル(すなわちページの出来るだけ上のほう)付近に投稿日時があればアクセスした段階ですぐにこの情報の鮮度が分かります。しかし、投稿日時が記事の終わった辺りにあったり、ものによっては記載されて無いのすらあります。何でなんだろうなぁ、と思ったしだいでした。blogなんて半分は自己満足ですから、そのレベルであるのであればそんなデザインでも良いのかもしれませんが、もう半分、情報の共有を踏まえるならもう少しその辺は親切になってもよいのではないかなぁと思いました。

コメントを残す

メールアドレスが公開されることはありません。