Apache 在 PHP 文件上持有文件锁,直到关闭

Apache holds file lock on PHP file until closed

我有一个由我的应用程序动态创建的 PHP 脚本,(只是 Apache 的 www 文件夹中的一个 fwrite。注意:Apache 是 运行ning 而这个正在发生).

应用程序然后使用 curl ping 脚本,脚本抛出错误并终止(如预期的那样。注意:我可以通过用浏览器点击它并返回在合理的时间内回复).

在此安装过程中,由于未知原因,Apache 为该特定文件创建了一个文件句柄。此句柄仅在 Apache 关闭时释放。

我的问题是,如果我现在尝试删除该文件,它会被锁定并且它的权限似乎已损坏(Windows 说对它的任何命令的访问被拒绝,我什至没有读取权限权限,所以我不知道权限变得多么混乱。

当 Apache 关闭时,它显然释放了这个锁,并且由于我的应用程序试图删除该文件但失败了,该文件随后立即从之前失败的删除中删除,现在锁是免费的。

我还安装了 cygwin,它有时会导致文件出现奇怪的问题,但这次似乎不是罪魁祸首。

有什么可能导致此行为的想法吗?以相同方式生成和使用的其他类似脚本绝对可以正常工作。

保存相关代码

FILE *fp = fopen(szFile, "wb");
    if (fp==NULL)
    return false;

    size_t nWritten = fwrite(strBuffer.data(), 1, strBuffer.size(), fp);
    fclose(fp);
    return (nWritten==strBuffer.size());

正确运行并且 returns 正确,创建时的文件与原始文件相同并且可以访问。文件锁定发生在 Apache 第一次加载文件时。方法无关紧要(通过程序中的 curl、wget、浏览器和 libcurl 获得相同的响应和文件句柄)。

注意:这只发生在 windows,在 Linux 程序仍然是 运行 来自 Windows,但执行它的所有文件 activity 与 SFTP

已解决,问题是由于 PHP 扩展维护了锁