2012-05-04 256 views
0

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

我有一个页面,允许用户查看特定文件的所有版本。我在想,如果有人在任何人访问这个页面的时候会有什么好处,那么php会检查是否有一个关联的文件被编辑过,现在已经关闭,只需将它移动到正确的位置并给它版本信息。这可能吗?例如,如果用户使用MS Word编辑文件,php是否能够知道该文件是否正在使用?如果是,如何?

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

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

任何想法?

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

下面是一些澄清,对他们有什么需要:如果安德鲁是单击对应于Word文件的“编辑”按钮,然后单击Word文件会复制到某个位置。然后,安德鲁会用MS字编辑它,保存他的更改(可能不止一次)并关闭它。这就是我想要安德鲁做的。我希望我的代码来查看该文件被关闭,然后做的东西与它

+0

要检查文件,PHP文件修改时间函数date(“Y-m-d。”,filemtime('filename.doc')) – Vaishu

+0

修改时间是修改时间,而不是关闭时间。通常人们会因为他们关闭而保存,但我无法确定他们没有编辑就没有保存东西 – Sheena

+0

您是否在'LOCK_EX'上使用'flock'? – Jon

回答

1

如果您在UNIX操作系统上运行,可以实现这样一个策略:

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

    你也可以说参数

  2. 回忆PHP该脚本

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

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

+0

我需要一些能在Windows上工作的东西。再次感谢 – Sheena

0

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

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

+0

。不知道是谁击倒了这个,为什么(评论会有帮助!),但这不是一个很糟糕的解决方案。它甚至被几个系统 – giorgio

+1

用在UNIX操作系统的很多,我怎么能得到每一个文件处理程序(如:词,记事本,开放式办公室的东西,等等),删除.lock文件给我吗?据我所见,这是不可能的,用户可以打开文件,但他们想要的。这是问题的症结所在...... – Sheena

+0

在关闭锁之后移除锁的最好方法是取消PHP中的“filename.lck”文件,该文件将从目录中移除该文件。 'FCLOSE($ myOpenedFile);未设置($ mylockfile);' –