我有一个由我的应用程序动态创建的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,创建时的File与原始文件相同且可访问。 Apache第一次加载文件时会发生文件锁定。方法无关紧要(通过程序中的curl,wget,browser和libcurl进行相同的响应和文件处理)。
注意:这只发生在Windows上,在Linux上,程序仍然从Windows运行,但使用SFTP执行所有文件活动
解决了,问题是由于PHP扩展维持了锁定