有没有更好的方法来查看是否正在写入文件?

时间:2012-05-04 14:05:19

标签: php

我们有一个带有samba的FreeBSD服务器,员工将图像文件复制到其上,然后上传到我们的Web服务器(这样他们就不必乱用ftp)。有时,如果上载脚本在复制文件的同时运行,则可以上载不完整的文件。

我们通过获取文件列表以及文件大小来修复此问题,然后等待5秒并重新检查文件大小。如果尺寸匹配则保存到上传,如果它们不匹配,则在另外5秒再次检查。

这似乎是检查文件是否被写入的奇怪方法。有没有更好,更简单的方法呢?

3 个答案:

答案 0 :(得分:2)

我建议shell_exec() smbstatus(1),例如smbstatus -LB检查锁定的文件

答案 1 :(得分:2)

使用flock函数http://php.net/flock - 在编写文件时获取独占锁flock($handle, LOCK_EX),在写入后释放锁flock($handle, LOCK_UN)

上传脚本也可以尝试获取独占写锁,如果成功则可以移动文件,否则没有。

编辑:抱歉,我忘了用户通过samba将文件复制到服务器...因此复制时没有空间可以使用flock ...但是上传如果成功与否,脚本仍然可以使用flock($handle, LOCK_EX)来查看。

答案 2 :(得分:0)

编写脚本将文件复制到Samba服务器上的临时文件夹,然后在完全复制和刷新后,移动(即取消链接/链接,不再复制),将它们移动到上传文件夹。