Apache对PHP文件保持文件锁定,直到关闭

时间:2019-04-16 09:39:00

标签: php c++ windows apache handle

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

然后,应用程序使用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());

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

注意:这仅在Windows上发生。在Linux上,该程序仍从Windows运行,但是使用SFTP执行所有文件活动

1 个答案:

答案 0 :(得分:0)

已解决,问题是由于保留了锁的PHP扩展

相关问题