在执行繁重的查询时加载消息而不是超时

Loading message instead of timeout while executing a heavy query

我是 运行 Zend 服务器和带 db2 数据库的 ZF1。对于某些导出,查询需要很长时间(> 50 秒),这会导致 408 超时错误。我正在寻找一种解决方案,以便在 运行 SQL 查询时在客户端显示加载消息。 感谢您的帮助。

您需要增加 php 允许的最大执行时间,以便它可以完成而不是被 408 return 代码终止。仅在该脚本的本地: http://php.net/manual/en/function.set-time-limit.php 或全球: http://php.net/manual/en/info.configuration.php#ini.max-execution-time

显示加载进度的最简单方法是使用 AJAX 请求执行长作业。您的主页应该显示加载进度并使用 Javascript 向导出脚本发出请求。当该导出脚本完成时,主页会显示一条成功消息。

如果导出脚本创建了类似于需要下载的 CSV 文件,而不是将该 CSV 作为响应正文发送,您可以将其输出到服务器上的文件,然后发送 url该文件在响应中。你在首页的Javascript可以显示url并在成功信息中提示用户下载

另一种方法是构建作业队列。这可以使用排队系统或仅使用数据库中的 table 个作业来完成。当用户请求导出时,您创建了一个新作业。您需要一个在服务器上运行的进程,例如 cron 作业,它检查所有新作业的 table,当有一个时,它运行导出并更新作业的状态。在您的页面中,您需要定期使用 Javascript 或仅通过重新加载页面来检查您的作业状态并在完成时显示一条成功消息。同样,如果导出创建一个文件,服务器进程需要写入它,并且您在成功消息中包含一个 link 以下载。