6

我们有一个带有 samba 的 FreeBSD 服务器,员工将图像文件复制到该服务器上,然后上传到我们的 Web 服务器(这样他们就不必与 ftp 混淆)。有时,如果上传脚本在复制文件的同时运行,它可能会上传不完整的文件。

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

这似乎是一种检查文件是否正在写入的奇怪方法。有没有更好、更简单的方法来做到这一点?

4

3 回答 3

2

I recommend to shell_exec() smbstatus(1), e.g. smbstatus -LB to check for locked files

于 2012-05-04T14:09:36.680 回答
2

使用flock函数http://php.net/flock - 写入文件时获得排他锁flock($handle, LOCK_EX),写入后释放锁flock($handle, LOCK_UN)

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

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

于 2012-05-04T14:18:22.300 回答
0

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

于 2012-05-04T14:10:07.167 回答