2012-10-12 68 views
0

在我的web服務上,用戶可以創建表單並讓他們的朋友或同事與他們創建數據。收集的數據可以作爲zip文件流下載。有時用戶擁有大量的數據(高達2GB),服務器只是因爲明顯的原因殺死了php進程。是否有可能創建這樣的文件在客戶端沒有閃光燈,Java(btw Java對我的大多數用戶不起作用)等?如何處理處理時間較短的大文件

+0

這是2GB只在一個文件中或跨多個文件? –

+2

什麼時候在下載或創建文件時被殺死?爲什麼它會死亡?時間,記憶,....? – Nin

+0

2GB是多個文件,它們被打包成一個zip文件。該zip文件在創建時被下載。是的,它確定了暫停。它有點像zip_create(name。「。zip」); foreach($文件作爲$文件){addFile($文件); flushNewStuff(); } zip_close(); – Alex

回答

0

增加您的腳本超時和內存使用情況。

使用set_time_limit功能Docs

而且使用ini_setmemory_limit參數。

還有一個解決方案是給客戶端文件部分。即給他們下載記錄數量的限制。即1-1000,1001-2000等

0

如果你能控制Web服務器進程,建議你探索x-send-file作爲解決方案。

See this SO question

它在本質上會結束PHP的過程,並通過HTTP服務器發送文件。這樣的時間限制不是一個問題,你沒有一個PHP實例懸而未決。

0

創建一個在後臺循環運行並繼續運行並檢查新數據的worker shell。如果它發現新的未處理數據,它會在後臺準備下載。當數據準備好下載時,將其標記爲「就緒」,並通知用戶(通過電子郵件,通過ajax輪詢狀態更新,無論您喜歡)他的數據是否已處理並準備下載。

您可以使用nice來限制該外殼使用的CPU功率,以避免它消耗所有可用的處理能力,並且您的站點變慢。

這正是我在我的一個項目中處理音頻和視頻處理的過程,它工作正常。