如果在 Web 服务器向网站访问者提供文件时删除 PHP 中的文件,会发生什么情况


What happens if you delete a file in PHP while the web server is serving the file to the website visitor

unlink("cache/data.xml");

我觉得这可能会在服务器可能正在阅读并将其提供给访问者时产生错误。

如何安全地删除文件,以便脚本继续等待,直到释放来自 Web 服务器的读锁定(如果有),然后继续删除文件或它在那里的工作方式?

谢谢

这将取决于运行它的特定系统,但是 UNIX unlink函数(PHP unlink 函数很可能在内部依赖它)的手册页是这样说的:

unlink()函数从其中删除按路径命名的链接 目录并递减文件的链接计数 由链接引用。 如果该递减减少了链接计数 文件为零,并且没有进程打开该文件,然后全部 回收与文件关联的资源。 如果一个或多个 删除最后一个链接时打开文件的过程,链接是 已删除,但文件的删除将延迟到所有引用 它已被关闭。

换句话说,读取文件的进程可以继续这样做,即使在删除文件时也是如此。