我们有一个带有samba的FreeBSD服务器,员工将图像文件复制到其上,然后上传到我们的Web服务器(这样他们就不必乱用ftp).有时,如果上载脚本在复制文件的同时运行,则可以上载不完整的文件.
我们通过获取文件列表以及文件大小来修复此问题,然后等待5秒并重新检查文件大小.如果尺寸匹配则保存到上传,如果它们不匹配,则在另外5秒再次检查.
这似乎是检查文件是否被写入的奇怪方法.有没有更好,更简单的方法呢?
使用flock函数http://php.net/flock - 写入文件时获取独占锁flock($handle, LOCK_EX),写入后释放锁flock($handle, LOCK_UN)。
上传脚本也可以尝试获取独占写锁,如果成功则可以移动文件,否则不行。
编辑:抱歉,我忘记了用户通过 samba 将文件复制到服务器...所以复制时没有空间可以使用flock...但是上传脚本仍然可以用来flock($handle, LOCK_EX)查看是否成功。