2016-10-01 18 views
1

我實現了一個SAAS的場景與我的Windows服務器進度條:用戶可以在a website上傳文件,然後Fetch.exe是服務器承載的編碼in C#應用,Fetch.exe需要上傳的文件作爲輸入,執行並生成一個輸出供用戶下載。一個應用程序

所以在我的PHP,我使用execFetch.exe

exec("Fetch.exe " . $inputFile . " > " . $outputFile) 

上傳和執行(即Fetch.exe)可能需要超過幾秒鐘,我想表明它是處理用戶和一切都很順利。

我發現了一些討論如何顯示上傳進度條的線程。然而,有沒有人知道我能做些什麼來顯示Fetch.exe的近似進度?我必須將其分成更小的應用程序並使用幾個exec

+0

'Fetch.exe'的輸出結果是什麼樣的? – LeonardChallis

+0

這只是一段文字,可能很短或很長。要處理'inputFile'並生成此文本,可能需要幾秒鐘的時間,因爲後面的分析... – SoftTimur

+0

您需要百分比進度或只有「正在加載」信息? – Cesar

回答

2

您可以提供Fetch.exe從php中隨機生成的ID,例如從uniqueid函數。 Fetch.exe將創建一個名爲<uniqueid>.txt的文件並顯示進度百分比。從瀏覽器中,您可以調用具有該唯一ID的另一個腳本來獲取該.txt文件的內容。爲了,這將是這樣的:

  • 用戶將文件上傳到PHP
  • PHP:
    • 處理上傳的文件
    • 創建UNIQUEID
    • 開頭Fetch.exe該文件和唯一ID
    • 返回一個頁面,其中嵌入了uniqueID

下並行發生:

  • Fetch.exe創建一個名爲/progress/uniqueid.txt與UNIQUEID姓名文本文件。它會記錄進度。
  • 瀏覽器就一個AJAX調用http://example.com/progress/uniqueid.txt和顯示進度給用戶

最後,當進度達到100%的瀏覽器下載的文件。您可能想要添加的唯一一件事是在一段時間後修剪進度文件。假設您每小時刪除10分鐘以上的所有文件。

1

您的PHP程序需要一種方法來了解子進程(Fetch.exe應用程序)的狀態,因此,Fetch.exe需要發送有關處理狀態的信息,最自然的方法是通過標準輸出(標準輸出是從cmd運行時提供程序的信息)。

知道了這一點,您可以運行並繼續閱讀subprocess output from php using popen()

而且secod,您可以使用PHP ob_flush()flush()onmessage javascript event從客戶端頁面,你的運行PHP腳本,here建立交際,你可以找到關於如何做到這一點的好教程。

相關問題