如何生成大批量word并导出压缩再zip里呢

场景

因为服务器性能低,定时器跑脚本,在生成20个左右的word并添加到zip就已经执行30秒了,然后php就断开了,所以报错了。我的想法是记下zip的地址,然后后面生成的新word就addFile到zip中,但我发现个问题,这样只会覆盖掉之前,没办法追加,请问有做过的前辈能指点下吗,怎样才能追加到之前的后面呢。百度了也没有准确的答案

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

file

2年前 评论
Laravel_Panda (楼主) 2年前
zlchen (作者) 2年前
zlchen (作者) 2年前
Laravel_Panda (楼主) 2年前
Laravel_Panda (楼主) 2年前
讨论数量: 19

异步去拉分页数据 组装execl, 最后在压缩

2年前 评论
Laravel_Panda (楼主) 2年前
jiangjun

定时器跑脚本为什么30s会断啊,cli不是不会超时吗

2年前 评论
Laravel_Panda (楼主) 2年前

直接扔到队列里,队列超时调长点,处理完保存下来并生成下载链接

2年前 评论
Laravel_Panda (楼主) 2年前

压缩文件可以追加的

2年前 评论
Laravel_Panda (楼主) 2年前
tomcath (作者) 2年前
Complicated 2年前

public function downloadfiles(Request $request){ $dir = $request->input('dir', 'uploads/20221103'); if($dir){ $path = public_path($dir); $zip_name = 'files.zip'; $zip = null; $count = 0; //迭代器 $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path)); foreach ($files as $name => $file){ //排除文件夹 if (!$file->isDir()) { //是否实例化了ZipArchive对象, if(!$zip) { $zip = new \ZipArchive(); //打开zip包 $zip->open($zip_name, \ZipArchive::CREATE | \ZipArchive::OVERWRITE); } //获取文件的绝对路径 $filePath = $file->getRealPath(); //把文件添加的zip包中 $zip->addFile($filePath, $file->getFilename()); $count++; } } if($zip){ //关闭zip包 $zip->close(); } if($count){ return response()->download($zip_name); }else{ return response('', 404); } }else{ return response('', 404); } }

试一试是否以上代码可以解决你的问题

2年前 评论

file

2年前 评论
Laravel_Panda (楼主) 2年前
zlchen (作者) 2年前
zlchen (作者) 2年前
Laravel_Panda (楼主) 2年前
Laravel_Panda (楼主) 2年前

生成word 是个耗时操作,会消耗cpu ,可以分开操作,会好一些,生成word 换成异步,加上标识

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!