2013-09-24 123 views
0

想象以下場景下載的文件:刪除一個目錄,包括當前正在由客戶端

  • 客戶端(瀏覽器)調用PHP腳本
  • 腳本生成WEB_ROOT /下載一個ZIP文件/tmp/test.zip
  • 腳本返回相應的,因此頭部開始下載該ZIP文件的
  • 腳本終止目錄WEB_ROOT /下載/ tmp目錄/

會發生什麼?

  1. Server隊列刪除和儘快刪除文件夾
  2. 目錄(文件)進行刪除,從而造成客戶損失
  3. 服務器拒絕刪除,因爲目錄被莫名其妙地鎖定
  4. 阿帕奇實際的連接克隆/緩存文件,然後再傳輸它們,以便刪除原始文件將不起作用

哪一個是正確的?

現在,我可以在自己的服務器上測試這種行爲,但是我想知道的是在這種情況下是否存在任何基於UNIX/LINUX的標準行爲的約定?

這種情況通常如何處理?

回答

1

5. Apache的文件系統inode是打開的,所以當你刪除文件時,它並沒有被刪除,它沒有鏈接。也就是說,鏈接web_root/downloads/tmp/test.zip已被刪除,但只要apache打開inode,inode仍然存在。當apache關閉inode時,它的鏈接數量達到零並被系統刪除

+0

正是我需要知道的!我認爲這是所有平臺和(甚至是)不同的HTTP服務器解決方案之間的一致行爲? – SquareCat

+0

並非所有平臺,只有unix。在Windows上,文件是文件,而不是鏈接,這就是爲什麼在更新後需要重新啓動。但在unix上,它對所有應用程序(以及http服務器)都是一致的。 – Marek