2

ftp を使用したファイルのアップロードにhttp://phpseclib.sourceforge.net/ライブラリを使用してい ます。この「アップロード中に ftp がファイル データを処理する方法」の背後にある概念を理解できません。

何が起こったのですか:

送信ボタンを使用してファイルアップロード用のフォームを作成しました.ファイルを選択して送信をクリックするとローダーが起動します.しかし、ファイルがサーバーに入らない.私の期待は、送信ボタンをクリックするとファイルからデータを読み取ってプッシュすることです. phpseclib に記載されているパケット サイズに応じて、サーバーに送信されます。

ローダーがブラウザに表示されている間に、私が誤解したことや何が起こっているのかを誰かが説明してくれましたか?

編集:

ファイルのアップロードには問題はありません。唯一のことは、それが非常に遅く呼び出された理由です。アップロード中に、php がファイルをサーバーにいくつかの一時ディレクトリに移動するかどうかを確認します。もしそうなら、なぜ私はftpアップロードに行く必要があります.

100Mb のファイルでテストしました。ファイルがアップロードされます。送信ボタンをクリックしてもすぐに起動しないのはなぜですか?

4

3 に答える 3

2

フォームはありenctype="multipart/form-data"ますか?

HTML ではenctype="multipart/form-data"、ファイルをアップロードするためにフォームに属性が必要です。通常、フォームは次のようになります。

<form id="form_id" enctype="multipart/form-data" method="POST">
<input type="file" name="file" />
<input type="submit" name="submit" value="submit" />
</form>
于 2011-07-01T10:48:01.937 に答える
1

よくわかりません。関連するPHPコードを投稿できますか

  1. ファイルをアップロードする POST リクエストの処理
  2. FTP ライブラリを呼び出して FTP 転送を開始する方法

私が考えているのはこれです: ユーザーがファイルをウェブサーバーにアップロードし、ウェブサーバーから FTP サーバーへの FTP を開始します。ここには 2 つのアップロードがあります。1 つは HTTP 経由、1 つは FTP 経由です。HTTP アップロードが完了するまで、FTP アップロードは開始されません。

于 2011-07-05T06:48:09.433 に答える
1

素晴らしい質問です。ここで 2 つのトランザクションを扱っています。最初のトランザクションは、ファイルを Web サーバー上の場所に置きます。これは、POST メソッドを介したトランスポートとして HTTP を使用します (このトランザクションの最も遅い部分でもある可能性があります)。

最初のクライアント側のアップロードが完了すると、ファイルは Web サーバーに保存され、S/FTP スクリプトが転送できるようになります。

以下のコメントを読むと、クライアント側から FTP を使用してファイルを転送することになりました。これは完全に実行可能なソリューションです。ただし、これは実装した現在のプロセスです。

現在のプロセス。

  1. ユーザー A は、ホストしている Web ページを使用して、HTTP 経由でファイルをアップロードします。
  2. ユーザー A は、ファイルのアップロードが完了するまで待ってからブラウザを閉じます。
  3. ファイルは、アップロード スクリプトで指定されたディレクトリ パスに保存されます。
  4. S/FTP スクリプトはファイルを読み取り、外部の S/FTP サーバーとの接続を開始して、そのサーバーへのファイルの転送を開始します。

手順 4 が冗長な場合は、クライアントから S/FTP 経由で転送する必要がない限り、S/FTP スクリプトはまったく必要ありません。

あなたの意図。

  1. ユーザー A は、ブラウザ ベースの S/FTP クライアントを使用して、S/FTP 経由でファイルをアップロードします。
  2. ユーザー A は、ファイルのアップロードが完了するのを待ちます。
  3. ファイルは、アップロード スクリプトで指定されたディレクトリ パスに保存されます。

コメントで、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 テクノロジーも使用できます。

于 2011-07-10T11:59:47.347 に答える