Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Ob_开始不捕获输出文件_Php_Phpdocx - Fatal编程技术网

Php Ob_开始不捕获输出文件

Php Ob_开始不捕获输出文件,php,phpdocx,Php,Phpdocx,我正在尝试生成报告并上传它。问题是,当生成文件的函数以readfile()结尾时,即使我将ob_start()放在函数调用之前,它也只下载文件。所以我不明白为什么ob\u start没有捕捉到它 问题应该在这里 我调用ob\u start() 然后我调用这样输出文件的函数 header('Content-Type:application/vnd.openxmlformats officedocument'。 “wordprocessingml.document”); 标题('Content-Di

我正在尝试生成报告并上传它。问题是,当生成文件的函数以readfile()结尾时,即使我将
ob_start()
放在函数调用之前,它也只下载文件。所以我不明白为什么
ob\u start
没有捕捉到它

问题应该在这里

  • 我调用
    ob\u start()

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

    header('Content-Type:application/vnd.openxmlformats officedocument'。
    “wordprocessingml.document”);
    标题('Content-Disposition:attachment;filename=“”.$fileNameDownload.”);
    标题(“内容传输编码:二进制”);
    标题('Content-Length:'.filesize($fileName..$this->_扩展名));
    readfile($fileName....$this->\u扩展名)

  • 在上一个函数调用之后,我将
    $content=ob_get_contents()

  • 四,
    ob\u end\u clen()


    我希望使用
    readfile()
    函数将开始写入缓冲区,但它会输出文件以供下载

    我相信,标题正在设置,而不是被输出缓冲区捕获,因此您可能需要将其取消,特别是因为
    内容处置:附件
    将响应设置为强制下载

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

    因此,如果函数设置:

    header('Content-Type: application/vnd.openxmlformats-officedocument.' . 'wordprocessingml.document');
    header('Content-Disposition: attachment; filename="' . $fileNameDownload . '"');
    
    在结束输出缓冲捕获后,您需要执行取消操作,即:

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

    我认为,正在设置标题,而不是由输出缓冲区捕获,因此您可能需要取消它们,特别是因为
    Content-Disposition:attachment
    正在将响应设置为强制下载

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

    因此,如果函数设置:

    header('Content-Type: application/vnd.openxmlformats-officedocument.' . 'wordprocessingml.document');
    header('Content-Disposition: attachment; filename="' . $fileNameDownload . '"');
    
    在结束输出缓冲捕获后,您需要执行取消操作,即:

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

    显示代码否则,我所能看到的只是像这样的东西的一个副本,我编辑了一点,希望这足够了,因为否则代码行数不多。在不回显缓冲区内容的情况下,您是否查看了在脚本执行结束时实际下载的内容?我的想法是你会遇到头球冲突。显示代码否则,我所能看到的只是像这样的东西的一个副本,我编辑了一点,希望这足够了,因为否则代码行数不多。在不回显缓冲区内容的情况下,您是否查看了在脚本执行结束时实际下载的内容?我的想法是你会遇到头球冲突。