Ob_start没有捕获输出文件

时间:2017-04-20 10:42:39

标签: php phpdocx

我正在尝试生成报告并上传它。问题是,当生成文件的函数以readfile()结束时,即使我在函数调用之前放置ob_start(),它也只是下载文件。所以我不明白为什么ob_start没有抓住它。

问题应该在这里

  1. 我致电ob_start()

  2. 然后我调用输出这样的文件的函数

    header('Content-Type: application/vnd.openxmlformats-officedocument.' . 'wordprocessingml.document'); header('Content-Disposition: attachment; filename="' . $fileNameDownload . '"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($fileName . '.' . $this->_extension)); readfile($fileName . '.' . $this->_extension);

  3. 之前的函数调用我放了 $content = ob_get_contents();

  4. 和4. ob_end_clen()

    我希望用readfile()函数将开始写入缓冲区,而是输出要下载的文件

1 个答案:

答案 0 :(得分:0)

我相信标头正在被设置,而不是被输出缓冲区捕获的事实,你可能需要取消它们,特别是因为Content-Disposition: attachment将响应设置为强制下载。

http://www.php.net/manual/en/function.ob-start.php

  

此功能将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本(除标题之外)发送输出,而是将输出存储在内部缓冲区中。

因此,如果函数设置:

header('Content-Type: application/vnd.openxmlformats-officedocument.' . 'wordprocessingml.document');
header('Content-Disposition: attachment; filename="' . $fileNameDownload . '"');

在您结束输出缓冲捕获后,您需要取消它,即:

header('Content-Type: text/html');
header('Content-Disposition: inline');