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();
// 执行导出插件
...
分页分配代码运行截图如下

