php:检查文件是否打开

时间:2012-05-04 09:41:30

标签: php file

我正在撰写文档管理系统。已经请求的功能之一是用户能够使系统将某些文件复制到用户和php都可以访问的位置。从这里,用户将能够直接编辑文件。需要做的是编辑后的文件必须作为新版本自动保存到文档管理系统。我的问题是关于最后一点。

我有一个页面,允许用户查看特定文件的所有版本。我觉得什么是很酷的事情,当有人访问这个页面然后php检查是否有一个已编辑的关联文件,现在关闭,只需将其移动到正确的位置并给它版本信息。这可能吗?例如,如果用户使用MS Word编辑文件,php是否能够知道该文件是否正在使用?如果是,怎么样?

另一个选择是只抓取所有定期编辑的文件(例如,在巫术时间内),并且还有一个方便的“同步”按钮,用户可以点击该按钮来表示他们已完成。

这是我尝试过的一些东西: flock:我认为对于正在使用的文件,它返回false。错误 fstat:据我所知,它不会返回任何有用的东西 取消链接:我想我可能会复制该文件,然后尝试取消链接原始文件(用户编辑过的文件)。事实证明取消链接适用于打开的东西

任何想法?

此外,它需要在Windows和Linux上工作......

以下是他们需要的一些说明:如果安德鲁要点击对应于单词文件的“编辑”按钮,那么单词文件将被复制到某个位置。安德鲁然后将使用MS word编辑它,保存他的更改(可能不止一次)并关闭它。这就是我想安德鲁所做的一切。我希望我的代码看到该文件已关闭,然后用它做任务

2 个答案:

答案 0 :(得分:1)

如果你在unix操作系统下运行,你可以实现这样的策略:

  1. 写一个像这个lsof | grep /absolute/path/to/file.txt

    的bash脚本

    您也可以参数化

  2. 回想一下php中的脚本

  3. <?php $result=shell_exec("myScriptPath"); echo($result); ?>

    请记住,如果没有人打开文件,bash脚本将返回状态0,否则为256(1)

答案 1 :(得分:1)

您可以为每个打开的文件创建文件“filename.lock”(或“filename.lck”)。 并且在解锁时删除文件“filename.lock”(或“filename.lck”)。

当文件“filename.lock”(或“filename.lck”)存在时,您可以检查文件是否被锁定。