Php 下载Excel文件以响应提交表单

Php 下载Excel文件以响应提交表单,php,javascript,Php,Javascript,我希望允许用户输入一个日期范围,然后能够下载一个Excel文件,其中包含根据该日期范围检索的数据 最初,我通过提交表单作为同一页面的GET请求来实现这一点。如果存在GET参数,页面将检索数据并输出所需的标题,然后输出数据。然后我将退出以防止页面加载(因为我必须发送包含Excel数据的标题) 这很有效。但是,我想包括一个进度指标,一旦数据发送,它就会消失。然而,我找不到这样做的方法 当按下表单提交按钮时,我可以启动这样一个指示器,但一旦文档输出供下载,我就找不到关闭它的方法 顺便说一句,Ajax在

我希望允许用户输入一个日期范围,然后能够下载一个Excel文件,其中包含根据该日期范围检索的数据

最初,我通过提交表单作为同一页面的GET请求来实现这一点。如果存在GET参数,页面将检索数据并输出所需的标题,然后输出数据。然后我将
退出以防止页面加载(因为我必须发送包含Excel数据的标题)

这很有效。但是,我想包括一个进度指标,一旦数据发送,它就会消失。然而,我找不到这样做的方法

当按下表单提交按钮时,我可以启动这样一个指示器,但一旦文档输出供下载,我就找不到关闭它的方法

顺便说一句,Ajax在这种情况下不起作用


有人能建议怎么做吗?我在这里看到过很多关于这个的建议,但我自己不知道该怎么做。

因为我没有可以作为基础的代码,所以我将主要为您编写理论

用户请求下载文件

加载一个页面,在该页面中,您正在创建文件,该过程需要一些时间,在此期间,您会向用户显示一个进度条

您将该文件保存到临时目录中,而不是使用header函数将该文件发送给用户(您无法使用该函数,因为您已经在屏幕上打印了)。最好使用随机名称或时间戳来调用它

文件创建结束时,在屏幕上打印如下JavaScript命令:

<script language=”JavaScript”>
self.location=”download.php?file=whatever_you_called_it.xls”;
</script>
header('Content-disposition: attachment; filename=your_excel_file.xls');
header('Content-type: application/xls');
readfile('tmp_dir/whatever_you_called_it.xls');

unlink ('tmp_dir/whatever_you_called_it.xls'); 
自己收拾东西总是好的。请注意,某些内容可能未被删除。所以无论如何,你最好有一个垃圾收集器。并将文件保存在公共目录之外


显然,如果数据不敏感,那么您可以简单地将javascript直接设置到文件中,浏览器将直接下载它。但是你需要某种垃圾收集器来清理所有创建的文件。。。这会很混乱…

下面的问题对你有用吗?如果您正在下载文件,则浏览器已经提供了一个指示器。你为什么还需要另一个?有些人有下载管理器或抗病毒药物使用者来处理它。@sєєm sєm m否。我已经正确返回了数据。我只是无法让进度指示器停止旋转,因为一旦输出了标题和数据,脚本就无法再与页面交互。@MAXIM生成数据需要几秒钟,而页面只是静止的空页面。我想以某种方式表明正在进行工作。浏览器指示器可以做到这一点,但用户仍然抱怨认为它“不起作用”。然后,您应该返工或继续,在生成数据时,不要发送标题。显示进度条并创建临时文件。当事情完成时,您显示它已完成,并将JavaScript命令输出到一个页面,该页面读取临时文件并输出标题。这将是一个快速刷新用户,但他会看到的进展之前,它开始下载