Apache:如果在文件复制期间请求,则返回损坏的文件

时间:2011-09-08 03:36:45

标签: php linux apache file-io filesystems

在我的网络服务器上,我每15分钟生成一个动画gif。结果写入临时目录,然后我通过php:copy()将gif(一些MB)复制到htdocs目录中。但是,如果在复制过程中有文件的http请求,Apache将只返回文件的一部分,这会导致动画损坏。

我该如何解决这个问题?使用rename()而不是copy()?或者有没有办法指示Apache在传递文件之前等待文件系统操作(不管这不是默认的吗?)?

2 个答案:

答案 0 :(得分:0)

绝对使用重命名而不是复制。重命名(mv,本质上),只是更改文件指针,所以即使它不是真正的原子(我无法找到一个确定的源,但我怀疑它是),它将是如此之快,以至于有人在该时间间隔内加载页面的几率几乎为零。

有关详细信息,请参阅:

希望这有帮助!

答案 1 :(得分:0)

您需要复制到临时文件名,然后重命名临时文件名。然后服务器永远不会看到不完整的文件。