保存到磁盘时,块只能包含字符串错误

时间:2013-02-15 05:09:56

标签: php phpexcel cakephp-2.2

背景

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

有什么问题

我把它缩小到这条线:

$this->PhpExcel->saveToDisk($path);

$path是在运行时设置的自定义路径。当我运行它时,它将文件保存到磁盘但它给了我:

enter image description here

这是自定义帮助程序类中的函数。以下是该函数的代码:

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搜索了错误,并尽力找到解决方案,但无济于事。此错误的可用信息量非常稀少或过时。有人可以告诉我,我错过了什么或做错了吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我通过删除这一行来修复它:

ob_end_clean();