Language agnostic 如何将输出显示到web浏览器并推送文件以供下载?

Language agnostic 如何将输出显示到web浏览器并推送文件以供下载?,language-agnostic,Language Agnostic,我知道如何将输出显示到web浏览器(显然),也知道如何通过设置内容配置和内容类型标题,然后推送文件数据,来推送客户机下载文件。但我想两者兼而有之,就像有多少下载页面可以工作一样(“您的文件下载将立即开始”) 使用什么技术来实现这一点?我在考虑使用META HTTP刷新,但问题是。。。该网页实际上正在进行一些相当复杂的处理,我希望将处理结果显示给用户,并将结果以文件形式推送给用户,但只执行一次处理。如果可能的话,我希望避免HTTP刷新。有没有办法通过一个页面请求来完成这两个任务?或者我必须将文件写

我知道如何将输出显示到web浏览器(显然),也知道如何通过设置内容配置和内容类型标题,然后推送文件数据,来推送客户机下载文件。但我想两者兼而有之,就像有多少下载页面可以工作一样(“您的文件下载将立即开始”)


使用什么技术来实现这一点?我在考虑使用META HTTP刷新,但问题是。。。该网页实际上正在进行一些相当复杂的处理,我希望将处理结果显示给用户,并将结果以文件形式推送给用户,但只执行一次处理。如果可能的话,我希望避免HTTP刷新。有没有办法通过一个页面请求来完成这两个任务?或者我必须将文件写入服务器,然后在HTTP刷新请求的第二个页面请求中提供文件?

在输出中使用一个iframe,该iframe将链接到要下载的文件

输出样本:

<div>Foo</div>
<iframe width="0px" height="0px" src="path/to/file"></iframe>
Foo
您不能用HTTP协议说“这个部分用于显示,那个部分用于下载”

但是,您可以将文件“缓存”到临时目录中,该目录从公共视图(文档根目录之外)无法访问,然后通过PHP输出该文档内容(例如:
file\u get\u contents
或其他内容)。然后,该临时文件夹可以由一个API清理,该API可以简单地扫描该文件夹并删除任何超过某个时间的文件(请参阅)


每次创建新文件时都可以进行此清理,从而将文件夹的大小保持在合理的值。

好的,我知道这将如何工作。。。但这也会向服务器创建第二个请求,我必须缓存该文件。我想我应该说这个文件不是真实的文件——它是来自SQL查询的数据。如果不需要,我不想将文件保存到磁盘,也不想执行两次SQL查询。是否有一种方法可以在不再次访问服务器的情况下同时向用户显示某些内容?谢谢!我找到了另一种我更喜欢的缓存方法——我只是将文件固定在会话变量中,然后用IFRAME重定向,告诉页面只发送会话变量中的数据,然后删除会话变量。像冠军一样工作!!是的:)那也行!只要您的文件/数据不是太大,在这种情况下,您就会突破内存使用限制(因为每个请求的会话数据都会完全加载到内存中)