1

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

我有一个页面,允许用户查看特定文件的所有版本。我在想,当任何人访问此页面时,php会检查是否存在已编辑且现在已关闭的关联文件,然后将其移动到正确的位置并为其提供版本信息,这将是一件很酷的事情. 这可能吗?例如,如果用户正在使用 MS Word 编辑文件,php 是否能够知道该文件是否正在使用?如果是,如何?

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

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

有任何想法吗?

另外,它需要在windows和linux上工作......

以下是他们需要的一些说明:如果安德鲁要单击与 word 文件相对应的“编辑”按钮,则 word 文件将被复制到某个位置。然后,Andrew 将使用 MS Word 对其进行编辑,保存他的更改(可能不止一次)并关闭它。这就是我希望安德鲁做的一切。我希望我的代码看到文件已关闭,然后对其进行处理

4

2 回答 2

3

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

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

于 2012-05-04T10:03:21.397 回答
2

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

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

    你也可以参数化

  2. 从 php 中调用该脚本

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

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

于 2012-05-04T09:56:55.823 回答