让PHP等到文件完成传输后再移动它

时间:2011-12-19 16:39:49

标签: php ibm-midrange

我有一个PHP脚本,可以将文件移出服务器上的特定文件夹(IBM AS400)。我遇到的问题是,有时脚本会在文件仍处于移入文件夹的过程中运行。

我的逻辑很差,假设一个文件“正在使用”,PHP不会尝试移动它,但它会导致文件损坏。

我以为我可以这样做:

$oldModifyTime = filemtime('thefile.pdf');
sleep(2);
if($oldModifyTime === filemtime('thefile.pdf'){
  rename('thefile.pdf','/folder2/thefile.pdf');
}

但即使在写入文件时,filemtime函数也会提供相同的值。我也试过了相同结果的文件。

如果我在Windows中执行右键单击 - >属性,则修改日期和访问日期会随着文件的写入而不断变化。

在做任何事情之前,如何确定文件是否已完成传输的任何想法?

2 个答案:

答案 0 :(得分:1)

将其作为临时名称或其他文件夹传输,然后在传输完成后将其重命名/复制到正确的文件夹。

答案 1 :(得分:1)

来自filemtime()的PHP手册条目:

注意:此功能的结果已缓存。有关详细信息,请参阅clearstatcache()


我还建议2秒有点短,以检测文件传输是否因网络拥塞,缓冲等而完成。