2011-07-01 49 views
2

我正在使用http://phpseclib.sourceforge.net/庫來使用ftp.Now進行文件上傳。我無法理解這個「如何在上傳時處理文件數據的ftp」背後的概念。ftp上傳如何在PHP中工作?

發生了什麼是:

我創建的形式上傳文件與提交button.When我選擇文件並點擊提交裝載機starts.But沒有進入server.My預期該文件是當我點擊提交按鈕它從文件中讀取數據,並根據phpseclib中提到的數據包大小推入服務器。

任何人都解釋了我誤解了什麼,或者在瀏覽器中顯示加載器時發生了什麼?

編輯:

文件上傳沒有issues.Only就是爲什麼它叫做這麼late.So同時上傳PHP是否將文件移動到服務器到一些tempdirectories。如果是這樣,爲什麼我需要去ftp上傳。

我用100Mb文件進行測試。文件上傳。我的期望是爲什麼它不會立即啓動後點擊提交按鈕?

+0

您的博客中是否有成功的POST?我沒有使用該庫,但我想你會將文件存儲在網絡服務器上的臨時位置,然後通過ftp上傳;我會檢查文件的位置和權限,以及相關的php.ini指令(內存中的max_post_size,upload_max_filesize和memory_limit) – smcphill

+0

post_max_size = 200M,memory_limit = 200M,upload_max_filesize = 200M,我得到了正確的日誌。 – svk

回答

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> 
+0

我編輯的內容。我不問在上傳什麼錯誤。它工作正常。我問背後的概念ftp上傳 – svk

1

我很困惑。您可以發佈相關的PHP代碼,顯示

  1. 你是上傳文件
  2. 你怎麼稱呼的FTP庫來啓動FTP傳輸

我覺得發生了什麼事POST請求的處理是這樣的:你的用戶上傳一個文件到你的網絡服務器,然後你從你的網絡服務器啓動FTP到FTP服務器。這裏有兩個上傳; 1通過HTTP和1通過FTP。在HTTP上傳完成之前,您不會看到FTP上傳開始。

1

偉大的問題,你正在處理2交易在這裏。第一個事務將文件放入Web服務器上的一個位置。這使用HTTP作爲通過POST方法的傳輸(也可能是此事務的最慢部分)。

初始客戶端上傳完成後,該文件將存儲在您的Web服務器上,在該服務器上可以傳輸S/FTP腳本。

閱讀評論低於你想要的是從客戶端使用FTP傳輸文件,這是一個完美可行的解決方案。但是,這是您實施的當前流程。

您目前的進程。

  1. 用戶A使用您承載的網頁通過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 based client

Flex based FTP Client question on Stack Exchange

實現與PHPSecLib的服務器側一個S/FTP客戶端。

SFTP.php on Gist (for line numbers and highlighting)

Original PHPSec SFTP.php

我通過Sourceforge的站點複製原件要點,所以你可以使用行號作爲指導。 SFTP庫需要文件的完整路徑(即/ tmp/somefilehere)或有效的PHP file resource。就像fopen$fp = @fopen('/tmp/somefilehere', 'rb');返回的那個例子一樣,見第1132行。

一旦通過驗證,與初始上傳相比,傳輸將非常快速。您的服務器可能位於數據中心,帶寬更多,因此文件傳輸速度更快。

您可能想通過您的網絡瀏覽器發起S/FTP事務。它可能與傳統的腳本語言如PHP/Python或Ruby不同。您可以通過瀏覽器使用Flash,Flex或Java以及可能還有一些Windows技術的S/FTP。

+0

再次一個問題。如果它第一次加載使用HTTP方法到服務器我得到的文件在服務器的文件夾.SO move_upload需要幾秒鐘才能將文件從temp中移出。那麼爲什麼我需要使用ftp upload.And也是在我的應用程序前端中使用Flex。所以能夠以更快的方式實現上傳 – svk

+0

您可以絕對在Flex中實現FTP協議,並且這將有助於在此示例中刪除中間人。再次讀你的問題我相信,如果你想要的只是用FTP替換2步機制,那麼它會做到這一點。但是,如果我經常看到這個例子,那麼在將它移到工作流中之前,您需要首先對文件進行編碼或解析,然後這可能沒有多大幫助。您仍然需要以某種方式管理這2個步驟的過程。 –

+0

如果要在同一臺服務器上移動文件,則不需要FTP上載。在Flex中實現S/FTP協議,將在本例中使用HTTP上傳進行替換。 –