背景
我正在生成一张Excel表格,通过电子邮件发送到某个地址。它在localhost上完美运行(完全保存,无法测试邮件,因为我没有运行本地邮件服务器)。当我主持它时,我遇到了一些问题。
有什么问题
我把它缩小到这条线:
$this->PhpExcel->saveToDisk($path);
$path
是在运行时设置的自定义路径。当我运行它时,它将文件保存到磁盘但它给了我:
这是自定义帮助程序类中的函数。以下是该函数的代码:
public function saveToDisk($path) {
// set layout
$this->_View->layout = '';
// headers
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
// writer
$objWriter = PHPExcel_IOFactory::createWriter($this->xls, 'Excel2007');
ob_end_clean();
$objWriter->save($path);
// clear memory
$this->xls->disconnectWorksheets();
}
但这是抓住了。当我将其输出到浏览器时,通过将$objWriter->save($path);
更改为$objWriter->save('php://output');
,它不会给我任何错误并完美导出文件。
问题
我已经用Google搜索了错误,并尽力找到解决方案,但无济于事。此错误的可用信息量非常稀少或过时。有人可以告诉我,我错过了什么或做错了吗?
答案 0 :(得分:0)
当你将文件保存到磁盘时,CakePHP仍然希望你给它一些东西来返回发出请求的浏览器,即使它只是一条消息说文件已经成功保存,或者是电子邮件已经发送成功。 如果您要保存到磁盘,则不希望发送标头,因为服务器不会返回Excel文件,因此没有标头。
答案 1 :(得分:0)
我通过删除这一行来修复它:
ob_end_clean();