2010-10-06 57 views
1

我知道如何將輸出顯示到Web瀏覽器(顯然),並且我還知道如何通過設置Content-Disposition和Content-Type標頭然後推送文件數據來推送客戶端下載的文件。但是我希望這樣做,類似於下載頁面的工作方式(「您的文件下載將立即開始」)。如何將輸出顯示到Web瀏覽器並推送文件進行下載?

使用什麼技術來實現它?我正在考慮使用META HTTP刷新,但這裏是...網頁實際上正在做一些相當複雜的處理,我想將處理結果顯示給用戶,並將結果以文件形式推送給用戶但只執行一次處理。如果可能,我想避免HTTP刷新。有沒有什麼方法可以通過單個頁面請求來完成這兩項操作?或者,我將不得不將文件寫入服務器,然後在來自HTTP刷新請求的第二頁請求上提供它?

回答

0

在您的輸出中使用一個iframe,它將鏈接到您要下載的文件。

輸出樣本:

<div>Foo</div> 
<iframe width="0px" height="0px" src="path/to/file"></iframe> 

你不能說「這部分如果顯示器和一個用於下載」使用HTTP協議。

但是,您可以將文件「緩存」在臨時目錄中,這是一個從公共視圖(文檔根目錄之外)無法訪問的文件,然後通過PHP輸出該文檔內容(例如:file_get_contents或其他)。然後可以通過API清除該臨時文件夾,該文件夾可以簡單地掃描該文件夾並刪除超過特定時間的任何文件(請參閱filemtime()

每次創建新文件時都可以執行此清理,從而保持大小的文件夾在合理的價值。

+0

好吧,我看到如何工作......但這也會創建第二個請求到服務器,我將不得不緩存文件。我想我應該說這個文件不是一個真正的文件 - 它是來自SQL查詢的數據。如果我不需要,我不想將文件保存到磁盤,而且我也不想兩次執行SQL查詢。有沒有辦法在沒有第二次訪問服務器的情況下同時向用戶顯示某些內容? – 2010-10-06 14:31:32

+0

恐怕不是。看我的編輯 – 2010-10-06 14:45:42

+0

謝謝!我發現了另一種緩存方式,我更加高興 - 我只是將文件卡在Session變量中,然後使用IFRAME重定向,告訴頁面只發送會話變量中的數據,然後擦除會話變量。像冠軍一樣工作! – 2010-10-06 15:21:54

相關問題