「自端末とサーバーの間でファイルのUPLOAD/DOWNLOADをブラウザで行いたい」と言われ、最初はHTTP通信で充分だと思い、そう作っていたのですが、お客さんに「フォルダごとのUPLOAD/DOWNLOADをしたいので、FTP通信で作り直してほしい」と言われました。
そこで作り直してみたところ、FTP通信でも、ファイル指定ではできるのですが、フォルダ指定で実装する方法がどうしてもわかりません。
自端末のフォルダの中身を知る手段がないのではと思っています。(PHPはサーバー側のみにあります)
サーバー側にあるPHPで、自端末のフォルダを指定したフォルダごとのUPLOAD/DOWNLOADは可能なのでしょうか。もし可能でしたら、実装例をお教えいただけますと嬉しいです。
ちなみに、ブラウザ固有の機能(アドレス窓に「ftp://xxx.xxx.co.jp/」と打ち込んで接続)を使う方法は、MacでできないためNGだそうです。
また、もしPHPのデフォルト機能で不可能な場合、「実装するにはこうすればいい(例:有料のプログラムをインストールするなど)」というような策がございましたらお教えください。
フォルダ指定でアップロードがPHPのみで実装できるなら・・
PHPスクリプトだけのFTPクライアントソフトが出来てしまいます・・
多分これが巷にないということは・・(PHP5なら出来る?)
・・・が似たようなことの実装経験はあります
お役に立つやらですが
私の場合クライアントのことはクライアントサイドでってことで
JavascriptとVBscript(というかWSH)で実装しました
ファイル存在チェック、ファイルサイズ、ファイルの拡張子指定、
何階層下まで掘るとかファイル数の制限とか
どう考えてもクライアントサイドじゃないと出来ないと思われたからです
私の場合イントラ内での稼動なのでブラウザはIEで固定
IEの「信頼済みサイト」でWSH動作OKなど
クライアント環境ががちがちなのでよかったのですが、
クロスプラットフォーム対応では・・うーんきついかも
(MacってWSH入ってるんですか?)
-----
1.FTP通信用のスクリプトを作ってクライアントに配布する。
あるいは、
2.JAVA(知っているかも知れませんがJAVAScritとは違います)などを使ってブラウザ上から使えるプログラムを作ってページ上に貼り付けておく。
といった方法になろうかと思われます。
-----
MacOS.Xであれば、ブラウザを使わずとも、コマンドラインでFTPコマンドを使うという手が使えますから、1がお手軽だと思います。
素直に「簡単に作ることは出来ないので、LZHやZIPといった圧縮を行って1ファイルにしたものを転送」するように提案するというのも手です。
お答えありがとうございます。
質問以前から今までずっといろいろと考えているのですが、PHP+HTMLでは実装不可能ですよね。
・・・と思うのですが、お客様はできると思っているようで何度「無理です」と言っても信じてくれません。どう説明すればよいのか悩んでいます。
1の「FTP通信用のスクリプト」というのは、どういうものになりますでしょうか。
例えばperlやPHPなどをクライアント端末に入れて、クライアント端末のスクリプトを動かすことによってアップロードする形になりますでしょうか。
(それなら普通にFTPツールを使ってくれればいいだけの気が・・・とか思わなくもない)
圧縮ファイルのダウンロードについては、提案したのですが無視されました・・・
2回目の回答を書いてしまいますが、お許しを、、、
回答1のupride さんのおっしゃるWindowsShellScriptはWindowsを操作するためのものであり、Macの場合はAppleScriptというものが実装されています。
上記URLのようにAppleScriptを使ってFTPを使う方法はネットでも各種紹介されていますので、それらを手直しして、ユーザーに配布すればよろしいかと思います。
-----
>「無理です」と言っても信じてくれません。
>普通にFTPツールを使ってくれればいいだけの気が・・・
ユーザー自身も社内で任されて、あなたの所に依頼している。 といった、相手の立場も考えてみてください。
無理だと言われて、それをそのまま上司に伝えて上司を納得させられると思われますか?
例えば、「何事も専用のソフトが必要なんです。ブラウザは1つのファイルをやり取りすることしか出来ないので、一度に遅れるのは1つになります。大量に一度に送りたい場合はFTPソフトを使う必要があります」
「FTPを行うソフトを1から作るのはコスト的に見合いませんから付属のものを使っていただくか、もしくは、圧縮して送るように考えてみてください」というように、相手の方が周囲に説明しやすいように返事をすることを考えてみてください。
相手の方の立場を理解した上で返事を出来るようになるには経験が必要ですが、それを身に付けるのも一流への道ですから、これを機会に周囲の人にも相談しながら、文句をいろいろ考えてみてください。
重ねてのお答えありがとうございます。
こちらはクライアントに配布する形になりますね。
>ユーザー自身も社内で任されて、あなたの所に依頼している。 といった、相手の立場も考えてみてください。
>無理だと言われて、それをそのまま上司に伝えて上司を納得させられると思われますか?
ご指摘ありがとうございます。一応、以前「ブラウザを利用するということで、httpプロトコルがベースとなるので複数ファイルをアップロードすることはできますがディレクトリ単位でのアップロードはできないのではないかと思います」「圧縮する形では無理でしょうか」など、と提案してみたのですが、「ftpで接続すればディレクトリ単位でのアップロードもできるはずです」と返されてしまったのです。
断言されたので、こちらの勉強不足かもしれないと思い、現在更に調査しているところです。
ご指導いただきありがとうございます。
内容的にWebDAVで必要十分なのでは?
WebDAVをキーにして探せば情報や書籍もたくさんあります。Macをクライアントにするのも可です。
ご回答ありがとうございます。
WebDAVについては全く存じませんでした。サーバーはapacheですので、あとはmod_davパッケージがインストールされているかどうかが問題になりますでしょうか。
今から情報収集してみます。
http://www.mars.dti.ne.jp/~torao/program/protocol/ftp.html
Hey! Java Programming! //POP3//
Javaアプレットを使ってPASVでPUTするという方法はNGでしょうか?
クライアントにPHPを入れるのであればphp ftp classあたりでぐぐって出てきたスクリプトを参考にされるといいと思います。
ご回答ありがとうございます。
最悪の場合は、Javaアプレットで作成することになるかと思います。
php ftp classでぐぐってみましたが、「PHPでftp接続」という点はクリアしているのですが(というかそこはPHP標準のFTP関数で実装できています)、「ディレクトリごとアップロード」についてはパッと見、見当たらないように思います。検索結果を全部見ていないので、これからひとつひとつ見てみます。
ありがとうございます。
http://www.soi.wide.ad.jp/class/20030038/slides/58/15.html
WebDAVによるファイル共有(2)
過去に同じような要望をお受けしたことが
あって結局ローカル側でソフト(Windows/C)でアップローダーを作成する形を取りました。
ただ単純にフォルダごとUP/DownができればよいのであればWebDavでファイル共有を行うのも手だと思います
ご回答ありがとうございます。
現状、「フォルダごとのアップロード/ダウンロード」以外の機能は全部まかなえておりまして、アップローダーを作るのは、工数の関係もありまして最終手段と考えております。
WebDavについてもっと調査してみて、これで解決できそうでしたらそうしたいと思います。
お答えありがとうございます。
そうですよね、私もクライアント側で動くプログラムがないとダメなのではないかと思っています。
クライアント環境は全然制限なしなので、クライアント側で実装となると、それも困った点になります。