素晴らしい質問です。ここで 2 つのトランザクションを扱っています。最初のトランザクションは、ファイルを Web サーバー上の場所に置きます。これは、POST メソッドを介したトランスポートとして HTTP を使用します (このトランザクションの最も遅い部分でもある可能性があります)。
最初のクライアント側のアップロードが完了すると、ファイルは Web サーバーに保存され、S/FTP スクリプトが転送できるようになります。
以下のコメントを読むと、クライアント側から FTP を使用してファイルを転送することになりました。これは完全に実行可能なソリューションです。ただし、これは実装した現在のプロセスです。
現在のプロセス。
- ユーザー A は、ホストしている Web ページを使用して、HTTP 経由でファイルをアップロードします。
- ユーザー A は、ファイルのアップロードが完了するまで待ってからブラウザを閉じます。
- ファイルは、アップロード スクリプトで指定されたディレクトリ パスに保存されます。
- S/FTP スクリプトはファイルを読み取り、外部の S/FTP サーバーとの接続を開始して、そのサーバーへのファイルの転送を開始します。
手順 4 が冗長な場合は、クライアントから S/FTP 経由で転送する必要がない限り、S/FTP スクリプトはまったく必要ありません。
あなたの意図。
- ユーザー A は、ブラウザ ベースの S/FTP クライアントを使用して、S/FTP 経由でファイルをアップロードします。
- ユーザー A は、ファイルのアップロードが完了するのを待ちます。
- ファイルは、アップロード スクリプトで指定されたディレクトリ パスに保存されます。
コメントで、Flex ソリューションを実装する可能性について言及しました。私が見つけた役立つリソースをいくつか紹介します。
Flex FTP ベースのクライアント
Stack Exchange に関する Flex ベースの FTP クライアントに関する質問
PHPSecLib を使用して、サーバー側に S/FTP クライアントを実装します。
Gist の SFTP.php (行番号と強調表示用)
元の PHPSec SFTP.php
Sourceforge サイトから Gist にオリジナルをコピーしたので、行番号をガイドとして使用できます。SFTP ライブラリは、ファイルへのフル パス (つまり /tmp/somefilehere ) または有効なPHP ファイル リソースのいずれかを想定しています。fopen によって返されるもののよう$fp = @fopen('/tmp/somefilehere', 'rb');
に、例として gist の行 1132 を参照してください。
認証されると、転送は最初のアップロードに比べてかなり高速になります。サーバーは、帯域幅がはるかに広いデータセンターにある可能性が高いため、ファイル転送ははるかに高速です。
おそらく、Web ブラウザ経由で S/FTP トランザクションを開始したいと思うでしょう。PHP / Python や Ruby などの従来のスクリプト言語では不可能です。Flash、Flex、または Java を使用してブラウザーから S/FTP を実行できます。また、おそらくいくつかの Windows テクノロジーも使用できます。