【问题标题】:Apache holds file lock on PHP file until closed [closed]Apache持有PHP文件的文件锁定直到关闭[关闭]
【发布时间】:2019-04-16 09:38:59
【问题描述】:

我有一个由我的应用程序动态创建的 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 执行它的所有文件活动

【问题讨论】:

  • The script throws an error and dies - 在脚本终止之前你有一个fclose
  • @DarkBee 当然可以。无论如何,这将导致我的应用程序处理。根据资源监视器,句柄由 httpd.exe 持有。
  • 分享你的代码好吗?我们应该如何帮助您。
  • @emix 相关部分已分享。
  • 如果你需要关闭或删除你的问题,而你不能(有投票的答案或有开放的赏金等),你可以标记它以引起版主的注意,他们会看看.请注意,不能保证他们会按要求为您删除。

标签: php c++ windows apache handle


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多