【问题标题】:Can I have php echo while a SQL query is running?运行 SQL 查询时可以使用 php echo 吗?
【发布时间】:2020-12-01 11:20:24
【问题描述】:

Liquidweb 托管我的网站,如果没有向负载平衡器发送信号,他们有严格的 30 秒超时政策。当我直接访问数据库时,我的 SQL 查询需要大约 34 秒的时间来处理。

我的 php 看起来像这样:

echo " "; //To keep the site alive
$results = $this->db->query($sql); //Takes longer than 30 seconds
echo " "; //To keep the site alive.

Liquidweb 无法更改 30 秒的限制,并且被查询的数据库是数万行的会员数据库,并且只会变得更大。

有没有办法让页面在后台运行 SQL 查询时向负载均衡器发送信号?

【问题讨论】:

  • 是的,您可以 - stackoverflow.com/a/5415754/296555。这里有很多选项,但第一个应该是查看为什么您的查询需要超过 30 秒。数万行并不是一个很大的数据集。
  • 这不是真正的 相关问题。您使用的是哪个 dbms?

标签: php sql timeout


【解决方案1】:

你可以发送 mysql 查询请求到 dev\null 并将数据存储在文件中吗?然后在 35 秒超时后通过 ajax 获取文件

例如

    ob_start();
    $size = ob_get_length();
    header("Content-Encoding: none");
    header("Content-Length: {$size}");
    header("HTTP/1.1 200 OK");
    header("Connection: close");
    ob_end_flush();
    ob_flush();
    flush();

    $results = $this->db->query($sql);
    $fo = fopen('path_to_file', 'a+');
    fwrite($fo, json_encode($result));
    fclose($fo);

超时后通过 AJAX 将此文件获取到前端

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多