我有一个PHP脚本,用于将文件移出服务器上的特定文件夹(IBM AS400)。我遇到的问题是,有时脚本在文件仍在移动到文件夹的过程中运行。让PHP等到一个文件完成传输后再传输
我的错误逻辑假设如果一个文件“正在使用”PHP不会尝试移动它,但它会导致文件损坏。
我想我能做到这一点:
$oldModifyTime = filemtime('thefile.pdf');
sleep(2);
if($oldModifyTime === filemtime('thefile.pdf'){
rename('thefile.pdf','/folder2/thefile.pdf');
}
但filemtime功能拿出即使文件被写入相同的值。我也尝试过使用fileatime获得相同的结果。
如果我在Windows中执行右键单击 - >属性,则修改日期和访问日期会随着文件的写入而不断变化。
任何想法如何确定文件是否完成传输之前做任何事情呢?
初始文件是从终端用户保存文件来进入文件夹,所以我不能自动“重命名/复制到正确的文件夹”,而无需在服务器端执行并遇到同样的问题。 – Mike 2011-12-19 18:20:54
这真的是最好的解决方案。如果是手动过程,则可能需要教育用户并调整脚本。例如,您可以忽略以.tmp结尾的所有文件,并指示您的用户使用.tmp上传,然后在上传后重命名。 – 2011-12-19 18:28:39
如果即使这是不可能的,那么看看这个问题:http://stackoverflow.com/q/4693168/608781 – 2011-12-19 18:29:00