1

我正在尝试生成报告并上传。问题是,当生成文件的函数以 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。ob_end_clen()

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

4

1 回答 1

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');
于 2017-04-20T12:31:27.420 回答