在PHP中设置标题之前显示输出

在PHP中设置标题之前显示输出,php,http-headers,Php,Http Headers,我有一个HTML表单,它通过POST将数据提交到服务器页面: <form id='report-inputs' method='post' action='generate.php'>...</form> 如果没有ob\u end\u clean()文件将作为损坏文件下载。我希望在页面完成处理时显示某种确认或其他内容,但需要注意的是,在使用ob\u end\u clean()进行渲染之前,任何页面输出都会被清除 如何才能显示某些内容并成功交付文件 谢谢。将数据保存到一个

我有一个HTML表单,它通过POST将数据提交到服务器页面:

<form id='report-inputs' method='post' action='generate.php'>...</form>
如果没有
ob\u end\u clean()
文件将作为损坏文件下载。我希望在页面完成处理时显示某种确认或其他内容,但需要注意的是,在使用
ob\u end\u clean()
进行渲染之前,任何页面输出都会被清除

如何才能显示某些内容并成功交付文件


谢谢。

将数据保存到一个文件中,在屏幕上显示您想要的任何内容,并将Javascript重定向添加到您保存的文件。

正如@mike-b所述,您不能做出相同的响应,同时做两件事。但以下是你能做的

  • PHP脚本应该创建下载文件,并将其保存为服务器上的临时文件
  • 向用户返回一个页面,说“感谢您对ProjectX…感兴趣”或其他任何内容
  • 输出页面应该在适当的间隔后将用户重定向到下载文件的URL。或者你可以提供一个实际的链接供他们点击。或者两者兼而有之

  • 你不能让回应同时做两件事。要么是text/html,要么是application/vnd.ms-excel。你得把它分成几个部分,明白吗。我打算显示的确认页面将与最初提交的数据相关。例如,如果我提交了“ProjectX,Product Y”,在处理输出后,我希望页面上显示“感谢您对ProjectX,Product Y感兴趣”。我知道我可以插入
    window.location('somewhere.php')
    ,但我需要数据来跟随它。@MikeB实际上,我不能插入
    块。标题可能已经被更改了…我已经考虑过了,但我反对,因为我不想让用户觉得他们的文件在使用链接时是可以下载的。相反,我将提交两次表格。第一次将与现在完全一样。当在浏览器中收到文件时,我将再次提交它,但会附加一段数据,表示不构建文件,而是返回一些HTML,其中包含用户所做选择的上下文。然后,我将使用javascript用第二次提交返回的html替换页面内容。
    ob_end_clean();
    header('Set-Cookie: fileDownloadToken='.$token); 
    header('Content-type: application/vnd.ms-excel');
    header('Content-Disposition: attachment; filename="'.$_DATA['title'].'.xlsx"');
    $objWriter->save('php://output');