2017-04-21 66 views
2

在以下情況下會發生什麼情況:當用戶下載文件時更改大文件會發生什麼?

在後端中,管理員上傳了很多(大)文件,並將其壓縮,結果爲example.zip

在某個時候,訪問者來到網站並開始下載這個大文件。管理員添加了一些更多的文件,並按下「轉換爲zip」。它開始壓縮並將結果寫入同一位置,同名example.zip

用戶下載量達到50%,新的zip文件是否會干擾此操作?我知道,PHP腳本被加載到內存中,但如果你有大文件,那些不適合。

// OPENING THE FILE IN READ-ONLY 
$fp = fopen($filepath, "r"); 
$bufferlength = 1024; 
while (!feof($fp)){ 
    // READ A BUFFER SIZE OF THE FILE 
    $buffer = fread($fp, $bufferlength); 
    echo $buffer; 
    $buffer = ""; 
    flush(); // THIS IS ESSENTIAL FOR LARGE DOWNLOADS 
} 
fclose($fp); 
+0

爲什麼downvote?也許我可以改善這個問題... – Martijn

+0

你測試過了嗎?這種情況極不可能實現。 Fopen將打開文件描述符,fread將讀取直到結束,如果下載更改文件的用戶將簡單地下載比無法打開的zip文件或無法結束的請求,因爲文件被讀取並按塊大塊地滾動,直到結束被發現。 – Gntem

+0

我要實現這個,所以我想事先知道要注意什麼:)這將在資源有限的主機上,所以我不能簡單地重命名它並創建另一個文件。同樣的原則,如果我在下載時刪除它(並且將另一個命名文件作爲回報放入今天的日期),現在會發生什麼? – Martijn

回答

0

雖然我還是不知道該回答我的問題,我不知道一個文件,該文件是刪除實際上並沒有得到當它在使用中刪除,直到它不再使用。

這意味着,當用戶正在下載大文件並且管理員刪除它時,它將繼續爲下載用戶進行,但對於其他用戶將顯示爲刪除。

在這種情況下,我創建了一個downloadZip.php,單擊它時,會得到最新版本的zip。當管理員重新壓縮所有內容時,將產生一個name2.zip,然後產生一個name3.zip等。

UserA單擊下載,獲取name1.zip。管理員刪除,用戶A不受影響,當用戶B點擊downloadZip.php時,他將獲得name2.zip

相關問題