2010-06-08 108 views
2

我正在使用PHP中生成的符號鏈接。它們是在有人請求下載時生成的,我希望它們在每天結束時過期。刪除臨時符號鏈接會中斷當前下載/訪問該符號鏈接嗎?

的問題是,如果有人開始一天結束前下載一個符號鏈接1分鐘,然後我刪除符號鏈接,而他們正在下載它...

我的問題是,你的知識那麼個人是否會在我刪除它之前下載符號鏈接,仍然能夠「下載」該文件?我並不擔心「可恢復下載」功能,但是它會使他們的下載停止或以某種方式中斷?

+0

詳細說明。你的PHP腳本創建一個符號鏈接?用戶被重定向到一個下載網址?然後apache開始發送該文件(比如50GB),就在cron作業刪除符號鏈接之前? – mario 2010-06-08 05:23:17

+1

我需要這樣做的唯一原因是我可以避免一些共享主機強制實施的「進程運行」限制,因爲一個PHP文件本身充當下載腳本,這意味着它是一個正在運行的進程,直到下載完成 - 然而,通過符號鏈接,我解決了這個問題,下載腳本立即結束,因爲他們直接通過符號鏈接下載文件。 – Joe 2010-06-08 05:29:09

回答

7

是的,你可以做到這一點。

在類Unix系統(包括Linux),你不刪檔。你刪除文件名。如果你刪除了一個其他人當前打開的文件,文件名將會消失,但數據將保留在磁盤上,直到文件關閉。

更差的符號鏈接:如果你刪除一個符號鏈接文件的數據仍然存在,並與文件打開任何程序是指它通過一個文件句柄,而不是文件名。

因此,只要您刪除符號鏈接您的腳本打開文件,下載將完成沒有任何麻煩。

+0

非常感謝! – Joe 2010-06-08 05:25:42

2

只要網絡服務器保持打開的文件,直到下載完成後,我會想到它。這將工作正常。在Linux上,你甚至可以將硬鏈接刪除到一個文件,只要網頁服務器保持打開狀態,網絡服務器仍然可以讀取它。

1

我的經驗說不然。 如果發生中斷(在連接中),或者用戶選擇暫停下載,則瀏覽器將無法始終恢復(因爲鏈接消失)。

我已經試過IE9x Chrome23.x Firefox17.x(Apache的共享服務器上)

我所做的,就是把符號鏈接的唯一文件夾,刪除基於時間的文件夾。在我的情況下,在30分鐘後(我的下載文件合理時間),我終止了文件夾(它包含了符號鏈接)。

(我不能讚揚這個想法---看到它在別的地方) I會說很短的中斷或暫停有時可以恢復。