删除包含客户端当前正在下载的文件的目录


Deleting a directory including a file that is currently being downloaded by a client

想象一下以下场景:

  • 客户端(浏览器(调用 PHP 脚本
  • 脚本在 web_root/downloads/tmp/test 中生成一个 ZIP 文件.zip
  • 脚本相应地返回标头,因此启动该 ZIP 文件的下载
  • 脚本终止目录 web_root/downloads/tmp/

会发生什么?

  1. 服务器排队删除并尽快删除文件夹
  2. 目录(和文件(被删除,因此客户端失去连接
  3. 服务器拒绝删除,因为目录以某种方式被锁定
  4. Apache实际上在流式传输文件之前克隆/缓存文件,因此删除原始文件将不起作用

哪一个是正确的?

现在,我可以在自己的服务器上测试这种行为,但我想知道的是,在这种情况下,是否存在任何定义基于 UNIX/LINUX 的标准行为的约定?

一般如何处理此类案件?

5. Apache 打开了文件系统索引节点,因此当您删除文件时,它不会被删除,而是取消链接。也就是说,链接 web_root/downloads/tmp/test.zip 被删除,但只要 apache 打开了 inode,索引节点仍然存在。当 apache 关闭 inode 时,其链接计数达到零并被系统删除