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

时间:2013-09-24 12:42:28

标签: php linux apache unix filesystems

想象一下以下情况:

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

会发生什么?

  1. 服务器队列尽快删除并删除文件夹
  2. 删除目录(和文件),客户端因此失去连接
  3. 服务器拒绝删除,因为目录以某种方式被锁定
  4. Apache实际上在流式传输之前克隆/缓存文件,因此删除原始文件将无效
  5. 哪一个是正确的?

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

    一般情况下如何处理此类案件?

1 个答案:

答案 0 :(得分:1)

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