让PHP在移动文件之前等待文件传输完成

让PHP在移动文件之前等待文件传输完成,php,ibm-midrange,Php,Ibm Midrange,我有一个PHP脚本,可以将文件从服务器(IBMAS400)上的特定文件夹中移出。我遇到的问题是,有时脚本在文件仍在移动到文件夹的过程中运行 就我而言,糟糕的逻辑假设,如果一个文件“正在使用”,PHP不会尝试移动它,但它会移动,这会导致文件损坏 我想我可以做到这一点: $oldModifyTime = filemtime('thefile.pdf'); sleep(2); if($oldModifyTime === filemtime('thefile.pdf'){ rename('thefi

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

就我而言,糟糕的逻辑假设,如果一个文件“正在使用”,PHP不会尝试移动它,但它会移动,这会导致文件损坏

我想我可以做到这一点:

$oldModifyTime = filemtime('thefile.pdf');
sleep(2);
if($oldModifyTime === filemtime('thefile.pdf'){
  rename('thefile.pdf','/folder2/thefile.pdf');
}
但是filemtime函数即使在写入文件时也会产生相同的值。我也尝试过fileatime,结果也一样

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


在对文件执行任何操作之前,您知道如何确定文件是否已完成传输吗?

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

来自PHP手册的以下条目:

注意:此函数的结果将被缓存。有关更多详细信息,请参阅



我还建议,由于网络拥塞、缓冲等原因,检测文件传输是否完成需要2秒钟。

初始文件来自最终用户,将文件保存到文件夹中,因此我无法自动“重命名/复制到正确的文件夹”而不是在服务器端这样做,并遇到同样的问题。这确实是最好的解决方案。如果这是一个手动过程,您可能需要教育您的用户并调整脚本。例如,您可以忽略以.tmp结尾的所有文件,并指示用户使用.tmp进行上载,然后在上载后重命名。如果甚至不可能,请查看以下问题: