php phpexcel导文件爆500(爆内存) && 应对

场景

  • 开发环境
    • 公司使用的php版本的是 5.5.30, 这一点必须吐槽(万年不变的版本 …哭), 升级是不可能升级的,这辈子都不可能
    • 因为PHP版本的限制 所以使用的是PHPOffice/PHPExcel
    • centos(7.0) 8核8G
    • 前端使用的 fileDownload插件
    • 已经设置set_time_limit(0)
  • 事件
    • 统计数据导出excel 在数据量大的时候 , 会报’500’的错误

分析

  • 排除代码的问题
    • 代码层面补充了两个之前没有try catch 去捕捉异常抛出; 但是无果
  • debug位置
    • log各部分发生的时间,发现数据获取代码是很快的且可以正常运行 所以问题出在生成excel
    • 而excel部分可能出什么问题呢? 内存 && CPU
      • excel 一个cell 占据1k的内存, 我的cell 13502*37 = 500M(将近) 而我的php.ini memory_limit='500M'
        现在已经找到问题的所在, 但是还需要确认下
        • htop 找到进程 , 哈果然内存瞟了起来

解决

  • 哈 我有内存 我豪啊
    • ini_set(‘memory_limit’, ‘1000M’); 但是我的在内存泄露了,进程结束内存不释放, 一段调试猛如虎(各种变量 null)binggo, 还是不行
    • 哪位大佬解决了, 可以告知一下
  • csv文件
    • 这个不耗内存 ,还快(辛亏不是给领导看的)
    • 怎么可能没有后续呢? 需要给运营的同学教下csv的正确打开方式
  • 升级php,换包
    • php7.2了解下
    • PHPOffice/PhpSpreadsheet 这个好很多
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值