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

Php 是否有更好的方法查看文件是否正在写入?,php,Php,我们有一个带有samba的FreeBSD服务器,员工可以将图像文件复制到该服务器上,然后上传到我们的web服务器上(这样他们就不必处理ftp)。有时,如果上载脚本在复制文件的同时运行,它可能会上载不完整的文件 我们通过获取文件列表和文件大小,然后等待5秒钟并重新检查文件大小来修复此问题。如果大小匹配,则保存上载,如果大小不匹配,则在5秒钟后再次检查 这似乎是一种检查文件是否正在写入的奇怪方法。有更好、更简单的方法吗?我建议使用shell_exec()smbstatus(1),例如smbstatu

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

我们通过获取文件列表和文件大小,然后等待5秒钟并重新检查文件大小来修复此问题。如果大小匹配,则保存上载,如果大小不匹配,则在5秒钟后再次检查


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

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

编写脚本将文件复制到Samba服务器上的临时文件夹,然后在完全复制和刷新后移动(即,取消链接,不再复制),使用
flock
功能-在写入文件时获得独占锁
flock($handle,lock\u EX)
,写入后释放锁
flock($handle,lock\u UN)

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


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

如果(!flock($fp,LOCK_EX | LOCK_NB)){//文件被锁定写入
?不确定
flock()
和samab的锁将可靠地相互看到对方-多年来出现了一些问题ago@EugenRieck只是在一个软呢帽盒上玩它,它似乎可以工作,但我想YMMV…@DaveRandom正如我所说,这是几年前的事了…PHP4和Samba 2(在Linux 2.4上)IIRC,现在也可以完美地工作了