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

时间:2012-11-07 17:21:00

标签: php http-headers

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

<form id='report-inputs' method='post' action='generate.php'>...</form>

generate.php对其给定的数据做了大量工作,最终转出Excel文件进​​行下载。它通过清理缓冲区并设置标题来完成此操作:

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');

没有ob_end_clean()文件下载为损坏。我希望在页面完成处理时显示某种确认或某些内容,但需要注意的是,在使用ob_end_clean()进行渲染之前,任何页面输出都会被清除。

如何显示某些内容并成功发送文件?

感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

正如@ mike-b已经说过的那样,你不能同时做两件事。但这是可以做的事情。

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