【问题标题】:Need page to wait for php to finish需要页面等待 php 完成
【发布时间】:2013-04-23 20:48:47
【问题描述】:

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

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

【问题讨论】:

  • 如果表值为空,很像查询在实时服务器上不起作用。也许您正在忽略一列。我建议在沙箱上运行查询并在确保您拥有一组值之后掷骰子。另一个问题可能是大写,有时在 phpadmin 中会很好,但对于服务器则不行。
  • 默认情况下,PHP 会等待脚本被完全解释(或达到默认时间限制)。您的查询是否以异步方式运行?显示一些代码。
  • 你能把你的代码贴在这里吗?
  • 你能给我们看一段代码吗?你使用异步代码吗?一般来说,“php 正在等待”您的查询结果。也许您的 html 语法中有错误,这会破坏代码?你看过网页的源代码吗?您的脚本中是否存在错误或异常?
  • 这只是一个查询,除非您知道数据库架构并且它在 php my admin 上运行,否则对你们来说可能没有意义。对于 php 代码,我只使用 mysqli_query 和 mysqli_fetch_assoc。没有抛出任何错误。我不确定运行异步的确切含义。这是默认的吗?

标签: php mysql http


【解决方案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

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

【讨论】:

  • 这可能是最好的方法,也是我一直在寻找的方法,但是我的查询太长(数十万行)并且浏览器可能会通过说“此网站离线”而超时跨度>
  • 查询本身还是结果?没有价值听起来很奇怪。通常 php 等到有结果。尝试执行var_dump($row); 以查看您是否在数组键中没有拼写错误,或者您是否需要添加别名。如果限制对您没有帮助,您可以尝试为正在查询的那些字段创建索引。
【解决方案2】:

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

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

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

这也令人困惑 - 如果您正在生成 HTML,那么页面是在 HTML 发送到客户端之后加载的 - 而不是之前。

简单的问题

不,不是——它很困惑!

【讨论】:

    【解决方案3】:

    谨慎之道

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

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

    快速修复

    要回答“我可以让网页等到代码完成吗?”这个问题。 – set_time_limit() 函数可以满足您的需求。

    【讨论】:

    • 我之前尝试过,但是网页在代码完成之前发送给客户端
    • 也许你只是需要更长的时间限制。不管怎样,我添加了一个你可以用另一种方式做的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多