我正在使用ZipArchive,PharData,PCLZip库,并尝试递归归档文件系统路径并包含数据库转储。解决方案有效,但如果有很多文件和/或大文件,则需要很长时间。在专用主机上,我可以增加时间限制/最大执行时间,但我需要更通用的解决方案。所以我选择使用客户端ajax请求并将代码分解为多个阶段。但是,如果需要“继续”状态,“存档”阶段需要多次调用,因为它没有完成它的处理,所以调用次数可以是N,它返回状态代码100表示继续,或者返回200表示成功/完成。在每个添加到存档文件之间,我检查已用时间,如果我接近最大执行时间,则选择重新启动,有时候我觉得在大文件或者存档的addFile需要太长时间的事情上我会发现瓶颈检查并开始了。因此,如果接近超时,有两种情况,例如超时和手动踢出。
在PHP中,脚本只是超时,如果浏览器退出或JS调用中止,我相信PHP脚本仍然执行,所以我不认为我可以在脚本上执行JS退出。在PHP中,我使用DirectoryIterator和RecursiveIteratorIterator以及自定义FilterIterator。我希望只是将这些对象检查到磁盘或在恢复时寻找它们到适当的位置以便在随后的ajax调用中恢复,但不确定是否可能。 Serialize没有做任何事情,我只是从DirectoryIterator查找操作得到预期的结果而不是封装它的RecursiveIteratorIterator。
在使用迭代器和递归压缩给定路径的文件/目录时,从ajax,checkpoint它的状态调用PHP函数以及在后续ajax调用上恢复的最佳方法是什么?如果我遇到大文件或其他情况,我保证会超时,因为如果我正在处理大文件,我就无法编写逻辑检查。我在寻找线程但在共享托管环境中似乎不可移植或不实用。理想情况下,我只想将状态存储在某个地方(可能是db),并且继续或超时只是恢复,即使我关闭了几个文件,我也可以检查文件是否在存档中,只是看起来太多开销如果我重新处理所有文件/文件夹并检查它们是否在归档中只是为了回到恢复点,因为我每次递归地重新扫描所有内容都是效率低下的。
我正在尝试一些没有运气的编码解决方案,任何指南都会很棒,我可以为POC发布代码。
这主要是一个ajax / client和长时间运行的php任务问题,非常感谢任何帮助或指导。