gpt4 book ai didi

php - 为什么在打开的文件上取消链接成功?

转载 作者:行者123 更新时间:2023-12-02 17:38:39 25 4
gpt4 key购买 nike

为什么打开的文件被删除了?在 Windows Xamp 上,我收到消息“仍在工作”,但在其他 PHP 服务器上,文件被删除,即使它是打开的,我收到消息“文件已删除”。我也可以从 FTP 中删除文件,即使第一个脚本仍在运行:(

<?php
$handle = fopen("resource.txt", "x");
sleep(10);
?>


<?php
if (file_exists("resource.txt") && @unlink("resource.txt") === false) {
echo "still worning";
exit;
}
else
echo "file deleted";
?>

最佳答案

UNIX 系统通常允许您这样做,是的。底层 C unlink 函数 is documented因此:

The unlink() function removes the link named by path from its directory and decrements the link count of the file which was referenced by the link. If that decrement reduces the link count of the file to zero, and no process has the file open, then all resources associated with the file are reclaimed. If one or more process have the file open when the last link is removed, the link is removed, but the removal of the file is delayed until all references to it have been closed.

换句话说,您基本上可以随时标记要删除的文件,但只要应用程序仍在访问它,系统实际上就会保留它。只有当所有应用程序都放开该文件时,它才会最终真正被删除。 Windows 显然不会那样做。 更新: Since PHP 7.3现在可以取消链接打开文件。

作为旁注,UNIX 的行为是多进程环境中唯一正常的行为。如果您必须等待所有进程关闭对文件的访问,然后系统才允许您删除它,那么删除经常访问的文件基本上是不可能的。是的,这就是关于 “无法删除文件,仍在使用,重试?” 的那些 Windows 对话框的来源,您永远无法摆脱它们。

关于php - 为什么在打开的文件上取消链接成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23287997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com