简单的问题,但我似乎无法找到答案。
我的PHP代码需要很长时间才能处理,因为我正在从大型数据库生成报告。我编写了一个html表来在网页中显示结果,但是在我的php代码完成之前页面加载(并被发送到客户端),因为所有的表值都是空的。我在phpMyAdmin上运行查询并且它可以工作,但它只需要很长时间。想法?除了在网页中看到报告之外,还有其他方式可以以表格格式显示报告吗?我可以让网页等到代码完成吗?
答案 0 :(得分: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
当然这一切都取决于你的代码,没有看到你的代码,只猜测原因可能是什么
答案 1 :(得分:0)
我可以让网页等到代码完成吗?
实际上,确实很难编写实现异步数据库调用的PHP代码 - 如果PHP脚本在MySQL脚本之前完成,则需要这样做。只需更改删除PHP代码中的所有异步处理程序并使MySQL调用阻塞,并且在查询完成之前不会退出 - 但我非常怀疑这是您的代码真正在做什么。
但页面加载(并发送给客户端)
这也很混乱 - 如果你正在生成HTML,那么在将HTML发送到客户端之后,页面就会被连接 - 而不是之前。
简单的问题
不,不是 - 它很困惑!
答案 2 :(得分:0)
审慎的方式
正如我所建议的那样,其中一个正确的方法是,根据用户的请求,将作业添加到由后台进程处理的队列中,例如,运行PHP命令行脚本从一个cron工作。在这种情况下,您可以通过网页上的AJAX调用定期从服务器请求作业状态,如果可以,则显示进度,并在作业完成后向用户显示结果。由于命令行PHP脚本没有时间限制,因此您不必担心超时。
另一种方式是实施,例如,在37signals的Highrise中 - 他们接受请求添加作业,但显示一个页面说“它准备就绪时就准备好了”,当它准备就绪时,他们发送一封电子邮件用户说“这是你的文件,来这里下载。”
快速修复
回答问题“我可以让网页等到代码完成吗?” - 有set_time_limit()
函数完全符合您的要求。