PHPexcel导出超时

PHPexcel 导出超时 Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) 

或者 Maximum execution time of 30 seconds exceeded

使用PHPexcel 导出时由于数据越来越多经常会遇到导出超时,超出PHP运行内存限制问题,超出运行时间30秒。

解决方式

  1. 如果对导出格式要求不高,我们可以将需要导出的内容分批导出
  2. 如果要求导出后是一个文件,可以将运行内存、运行时间调大。或者跟换导出插件 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();
// 执行导出插件
...

分页分配代码运行截图如下

 

给TA支持
共{{data.count}}人
人已支持
php工作日志thinkphp资源分享

海豚PHP阿里云短信插件

2020-12-16 23:10:19

php工作日志thinkphp

thinkphp5 数据库字段比较不生效

2020-12-22 11:23:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索