[PHP-users 32079] Re: ファイルブラウザ

kanonbell kanonbell.sky @ gmail.com
2007年 5月 6日 (日) 02:06:34 JST


こんばんは。

> phpでファイルブラウザのようなものを作ろうとしています。

Windows環境ですが、似たようなことをやっています。
私が作ったのはディレクトリのみ(ファイルは無視)のもので、何らかのアプリケーションで
ファイルを保存する際に出てくる、保存先指定のダイアログに相当するものを作った、
と言えばわかりやすいかな?

Ajaxを利用し、prototype.jsを使用してダイアログを表示するHTML+Javascript部分と、
このダイアログからカレントディレクトリの情報を受け取り、その中に存在するサブディレクトリ
の情報を返すPHPファイルで構成されています。
別にAjaxじゃなくてもできるとは思いますけれど、なんとなく。

カレントディレクトリの情報(これがなければとりあえずc:\)をprototype.jsを用いてPHPに
渡し、PHPは奥井さんがお作りになったような関数を回してサブディレクトリの
情報を取得し、JSON形式でprintしてHTML側に値を返す。
HTML側はprototype.jsの機能でPHPが出力した値を取得できるので、サブディレクトリ情報を
取得し、JavaScriptでaタグを書くことで動的に表示が更新されます。
aタグはサブディレクトリの数だけ縦にずらっと画像つきで並べています。
ハイパーリンクではなくJavascriptの関数をディレクトリ名を引数にして起動させるために
aタグを使ってる感じ。

ん〜、ちょっと説明が難しいな。
Ajax触ったことある人はなんとなく想像つきそうな簡単なものですけれど。

> ディレクトリの内容を配列に格納する関数はできましたが、そのディレクトリ内容を表示したりディレクトリをクリックしたらその中のディレクトリを表示するhtml文を作成する方法が思い付きません。

単に選択されたディレクトリの情報をsubmitするHTMLを書けばいいだけですね。
Windowsの例として記述しますが、カレントディレクトリがc:\だった場合、そのサブディレクトリ
の情報はすでに取れるのですから、例えばc:\hogehogeとc:\fugafugaがあるとすれば
サブディレクトリの数だけ、つまり2コsubmitボタンを表示すればいいです。
valueの値を統一したいなら、ボタン押下時にPOSTされる値を変えられるようJavaScriptを
組み合わせる必要がありますが、そうじゃないならvalueにサブディレクトリ名を入れる。
で、サブディレクトリ名がPOSTされるので今度はそこをカレントディレクトリとして$_POST
なりで取得し、作成済みの関数に突っ込んで取得、またHTML表示の繰り返し。

難易度としてはとりあえずvalueにディクレトリ名入れてどんどん下層のディレクトリまで
辿るものが簡単なので、まずそれ作ってから、目的の方向に機能を肉付けしていくと
いいのではないでしょうか。


高原さんの方法のようにまとめて取得しておき、visibleをいじる方法もありますね。
階層が深いと時間がかかったり、ファイルやディレクトリ構成が変更された時に反映しにくい
ことがありそうですが、そちらの方法でもいいかも。


PHP-users メーリングリストの案内