Php 影响Excel下载的Laravel调试栏
因此,我今天安装了Laravel Debugbar,试图让我的本地开发人员获得更好的体验,而且在很大程度上,它做到了。但是,当我尝试下载从PhpOffice\PhpSpreadsheet()生成的Excel时,出现了一个问题,下面是一段有问题的代码:Php 影响Excel下载的Laravel调试栏,php,laravel,laravel-6,phpspreadsheet,phpdebugbar,Php,Laravel,Laravel 6,Phpspreadsheet,Phpdebugbar,因此,我今天安装了Laravel Debugbar,试图让我的本地开发人员获得更好的体验,而且在很大程度上,它做到了。但是,当我尝试下载从PhpOffice\PhpSpreadsheet()生成的Excel时,出现了一个问题,下面是一段有问题的代码: $excelFile=新电子表格(); //从数据库中以表格等形式加载内容。 $writer=newxlsx($excelFile); $filename='testing.xlsx'; $writer->save($writer)php://ou
$excelFile=新电子表格();
//从数据库中以表格等形式加载内容。
$writer=newxlsx($excelFile);
$filename='testing.xlsx';
$writer->save($writer)php://output');
这非常有效,内容以.xlsx
文件的形式加载和下载,没有问题。当我打开文件时,会收到以下警报:
我们发现“testing.xlsx”中的某些内容存在问题。你想让我们尽力恢复吗?如果您信任此工作簿的来源,请单击“是”
我单击“是”,然后收到此警报:
Excel能够通过修复或删除不可读的内容来打开该文件
我单击“删除”,打开我的文件,没有删除任何内容(将文件与master
branch上的上一次提交进行比较,没有更改)
现在是有趣的部分,我只有在启用调试栏时才会收到此警报。在.env
中,我启用了DEBUGBAR\u=true
,如果我将其设置为DEBUGBAR\u ENABLED=false
并重新加载/重新下载,则不会收到警报。以前有人见过这个问题吗?Debugbar为什么要搞砸这件事?这是否是$writer->save>的问题php://output');代码>被Debugbar的注入污染了
旁注,这在生产中不会成为问题,因为Debugbar是一个需要开发的依赖项,但我只是好奇我是否能在本地开发过程中避免这种情况。显然,官方文档已经对此进行了询问和回答;只是有点难找。通过debugbar,我对对象污染的看法是正确的,简单的解决方法是添加exit()代码>在$writer->save()之后代码>:
$excelFile=新电子表格();
//从数据库中以表格等形式加载内容。
$writer=newxlsx($excelFile);
$filename='testing.xlsx';
$writer->save($writer)php://output');
退出();
关于ob_clean()
和/或ob_end_clean()
,ob_flush()
等还有一些注释,但这些注释都不能用于Laravel+Debugbar。供参考:
旁注,这会阻止Debugbar处理与Excel下载相关的GET
或POST
请求,因此需要一些互让。只需在本地注释掉exit()
即可进行调试,但Excel将被标记为已损坏。使用exit()
打开的简单重复操作将处理此问题。显然,官方文档中已对此进行了询问和回答;只是有点难找。通过debugbar,我对对象污染的看法是正确的,简单的解决方法是添加exit()代码>在$writer->save()之后代码>:
$excelFile=新电子表格();
//从数据库中以表格等形式加载内容。
$writer=newxlsx($excelFile);
$filename='testing.xlsx';
$writer->save($writer)php://output');
退出();
关于ob_clean()
和/或ob_end_clean()
,ob_flush()
等还有一些注释,但这些注释都不能用于Laravel+Debugbar。供参考:
旁注,这会阻止Debugbar处理与Excel下载相关的GET
或POST
请求,因此需要一些互让。只需在本地注释掉exit()
即可进行调试,但Excel将被标记为已损坏。启用exit()
的简单重复操作将处理此问题