PHP Zip创建(覆盖)是原子操作吗?


Is PHP Zip creation (overwrite) an atomic operation?

我们的应用程序覆盖一个已经存在的ZIP文件。zip文件是可下载的,对于zip创建,我们使用PHP ZipArchive。

现在问题是:我是否必须创建TMP ZIP文件并将其重命名为所需的可下载文件名才能进行原子操作并始终访问有效的ZIP文件,或者ZipArchive的ZIP创建过程已经是原子的?

编辑:在使用多个addFile调用(与睡眠分开)对其进行测试后,似乎文件是在最后的关闭调用时创建/覆盖的。但是问题仍然存在,最终的ZIP文件创建是原子的吗?

用一个巨大的目录结构(创建zip需要大约10秒)对它进行测试,并在生成的zip文件上执行"watch -n 0.1 unzip -t foo.zip",似乎zip文件的创建是原子的。至少在测试ZIP文件时没有出现错误。