阐述下:我改bug的过程,如下:这个项目是我接手外包项目的二次开发,某天突然发现,线上导出功能报错。检查线下代码无错误并导出功能没有报错,本地Apache服务器测试-->正常,打开导出的execl文件中数据也正常;到服务器上就会报找不到该文件错误,如图:
谷歌浏览器报文件已迁移什么的。由于代码已经线上运行了n天,且本地代码导出功能正常,所以肯定代码程序没问题,百度了一下发现大致
第一个是php7版本问题,phpexcel对在php7中使用save(‘php://output’)出现ERR_INVALID_RESPONSE的错误,主要是下面错误导致:
(1)header和缓冲区的错误导致,下面示例代码可以正常导出:
header('Content-type: application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"');
header("Content-Disposition: attachment; filename=$fileName.xls");
header('Cache-Control: max-age=0');
//header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
//header ('Cache-Control: cache, must-revalidate');
header ('Pragma: public');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
(2)错误语法导致:打开PHPExcel\Calculation\Functions.php文件,删除掉581行的break即可
但是我线上线下php版本都是php5.5,而且phpexcel版本1.8.1已经最新版本,所以这个问题pass。但我还是查看了一下,事实证明不是这个原因导致
第二个是目录的权限问题
我当即在服务器上修改项目所以的目录都有777的权限,但是问题还是没解决,导出还是报错
没办法了所有又去代码中debug发现都在save(‘php://output’)报错,期间又百度谷歌了一番,解决的方法都是大同小异,问题还是没解决。
最后只能线上调试代码到导出phpexcel文件 \beifen_carrental\vendor\phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007.php save方法中
写死了路径(图片//部分),发现导出功能正常。
上面方法中解决了导出问题。
总结:出现这个bug的问题应该是路径问题,但我不知道为什么会出现这个问题,我在php.ini配置文件中修改了upload_tmp_dir路径
解决图片上传问题(和phpexcel导出功能一样,也是这个原因),大致就是临时文件地址保存错误。
其中解决问题的时候发现几个类似的bug解决方案:
http://blog.csdn.net/qq_20480611/article/details/48003871
https://www.jianshu.com/p/b93a69bf229e