0

背景

我正在生成一个通过电子邮件发送到某个地址的 Excel 工作表。它在本地主机上完美运行(完美保存,无法测试邮件,因为我没有运行本地邮件服务器)。当我托管它时,我遇到了一些问题。

什么问题

我把它缩小到这一行:

$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');不会给我任何错误并完美地导出文件。

问题

我已经用谷歌搜索了错误并尽力找到解决方案,但无济于事。有关此错误的可用信息量非常稀少或过时。有人可以告诉我我错过了什么或做错了什么吗?

4

2 回答 2

0

当您将文件保存到磁盘时,CakePHP 仍然希望您给它一些东西以返回到发出请求的浏览器,即使它只是一条消息说文件已成功保存,或者电子邮件已发送成功。如果要保存到磁盘,则不想发送标头,因为服务器不会返回 Excel 文件,因此没有标头。

于 2013-02-15T07:26:18.107 回答
0

我通过删除此行来修复它:

ob_end_clean();
于 2013-02-18T07:34:29.457 回答