一、出现场景
-
在
thinkphp
框架中使用phpoffice/phpexcel
,直接导出Excel表格浏览器下载,报错:ERR_INVALID_RESPONSE -
注意:在 本地 windows 环境导出没问题,在 线上 Linux 环境才出现该问题。
-
问题截图:
二、寻找解决办法
1、网上解决方案
1)、缓冲区问题
在调用save("php://output")之前调用ob_clean()
,部分代码如下
ob_clean(); //清空缓存 //最后通过浏览器输出 $fn = "文件的名字(" . date("Y.m.d") . ").xls"; //要保存的文件名 header('Content-Type: application/vnd.ms-excel; charset=utf-8'); header("Content-Disposition: attachment;filename={$fn}"); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit;
2)、factory581行报错,删除break
- factory581行报错,删除break;
PHPExcel\Calculation\Functions.php文件,删除掉581行的break
我们的 phpoffice/phpexcel 是 composer 安装的,每次更新都得去改源码,不建议修改源码,就算能解决问题,也不予采纳。
2、我的这个问题解决方案,Linux下安装zip扩展
- 【解决】我这个问题就是Linux缺少了
zip
扩展,安装即可~
三、zip扩展
- windows下的php(我的版本是7.3.3)是自带zip扩展的,
php/ext
目录下都没有php_zip.dll
文件,如图所示
- Linux下的php没有安装 zip 扩展
来源地址:https://blog.csdn.net/qq_36025814/article/details/125860682