1

简单的问题,但我似乎无法找到答案。

我的 php 代码需要很长时间才能处理,因为我正在从大型数据库生成报告。我编写了一个 html 表以在网页中显示结果,但是在我的 php 代码完成之前页面加载(并被发送到客户端),因为所有表值都是空的。我在 phpMyAdmin 上运行查询,它可以工作,但只需要很长时间。想法?除了在网页中查看报告之外,还有其他方法可以以表格格式显示报告吗?我可以让网页等到代码完成吗?

4

3 回答 3

1

有几种方法

一个正在使用

ob_start();
// processing
ob_flush();
flush();

接下来是添加分页,也就是限制结果大小。

SELECT * FROM table LIMIT 0,10

SELECT * FROM table LIMIT 10,10

SELECT * FROM table LIMIT 20,10

当然这一切都取决于你的代码,没有看到你的代码,只能猜测可能是什么原因

于 2013-04-23T21:05:31.560 回答
0

我可以让网页等到代码完成吗?

编写实现异步数据库调用的 PHP 代码真的非常困难——如果 PHP 脚本在 MySQL 脚本之前完成,则需要这样做。只需更改去掉 PHP 代码中的所有异步处理程序,并使 MySQL 调用阻塞,它不会在查询完成之前退出 - 但我非常怀疑这就是你的代码真正在做什么。

但是页面加载(并被发送给客户端)

这也很困惑——如果你正在生成HTML,那么在 HTML 发送到客户端之后页面会被加载——而不是之前。

简单的问题

不,不是——它很困惑!

于 2013-04-23T21:07:29.763 回答
0

审慎之道

至少我推荐的一种正确方法是,根据用户的请求,将作业添加到由后台进程处理的队列中,例如,从 cron 运行的 PHP 命令行脚本工作。在此过程中,您可以通过网页上的 AJAX 调用定期向服务器请求作业状态,显示进度(如果可以),并在作业完成后向用户显示结果。由于命令行 PHP 脚本没有时间限制,因此您不必担心超时。

另一种方式是在 37signals 的 Highrise 中实现的方式——他们接受添加工作的请求,但显示一个页面,上面写着“它准备好时就准备好了”,当它准备好时,他们向用户发送一封电子邮件说“这是你的文件,来这里下载。”

快速修复

回答“我可以让网页等到代码完成吗?”的问题。– 有一个set_time_limit()功能可以完全满足您的需求。

于 2013-04-23T21:59:56.523 回答