PHPexcel 导出超时 Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)
或者 Maximum execution time of 30 seconds exceeded
使用PHPexcel 导出时由于数据越来越多经常会遇到导出超时,超出PHP运行内存限制问题,超出运行时间30秒。
解决方式
- 如果对导出格式要求不高,我们可以将需要导出的内容分批导出
- 如果要求导出后是一个文件,可以将运行内存、运行时间调大。或者跟换导出插件 PhpSpreadsheet
第二种方式
导出超时处理:在执行页面添加:set_time_limit(0);
内存溢出:在执行页面添加:ini_set("memory_limit", "1024M");
第一种方式示例, 比如我要将数据表的内容分批导出,部分函数使用框架thinkphp
// 每次导出的最大值,看自己的机器配置调整 $pagesize = 20000; $page = !empty($_GET['page']) ? $_GET['page'] : 0; // 不带页数时查询是否需要分页 if(empty($page)) { $count = Db::name("xiadmin")->count(); if($count > $pagesize) { $ci = ceil($count / $pagesize); echo "数据过大,需要分批导出<hr>"; $li = '总数据'.$count.'条,分:'.$ci.'批导出,每次最多'.$pagesize.'条<hr>'; for ($i=0; $i < $ci; $i++) { $page = $i+1; $file_name = '-第'.$page.'批'; // 带着页数回到当前页面 $li .= '<a href='.url('export',['page'=>$page]).' target="_bank">'.$file_name.'</a><br>'; } echo $li; exit; } }else{ // 数据已经分页,直接导出 $file_name .= '-第'.$page.'批'; } //需要导出的数据 $export_data = Db::name("xiadmin")->page($page, $pagesize )->select(); // 执行导出插件 ...
分页分配代码运行截图如下