Php 改进定期查询SQLite数据库的代码

Php 改进定期查询SQLite数据库的代码,php,sqlite,Php,Sqlite,我有一个定期从PHP查询的sqlite数据库。查询总是相同的,它返回一个字符串。一旦数据库中的字符串发生变化,循环就结束了 下面的代码正在运行,但我很确定这不是实现这一点的最佳方式 class MyDB extends SQLite3 { function __construct() { $this->open('db.sqlite'); } } $loop = True; while ($loop == True) { sleep(10)

我有一个定期从PHP查询的sqlite数据库。查询总是相同的,它返回一个字符串。一旦数据库中的字符串发生变化,循环就结束了

下面的代码正在运行,但我很确定这不是实现这一点的最佳方式

class MyDB extends SQLite3
{
    function __construct()
    {
        $this->open('db.sqlite');
    }
}

$loop = True;
while ($loop == True) {
    sleep(10);
    $db = new MyDB();
    if (!$db) {
        echo $db->lastErrorMsg();
    } else {
        echo "Opened database successfully\n";
    }
    $sql = 'SELECT status from t_jobs WHERE name=' . $file_name;

    $ret = $db->query($sql);
    $state = $ret->fetchArray(SQLITE3_ASSOC);
    $output = (string)$state['status'];
    if (strcmp($output, 'FINISHED') == 0) {
        $loop = False;
    }
    echo $output;
    $db->close();
}

如果您想立即获得一个输出和一种接口,我认为解决您的问题的最佳解决方案可能是使用HTTP长轮询。这样,如果作业未完成,它将不会保持连接数小时:

  • 您需要编写一个javascript代码段(在另一个html或php页面中),以运行对当前php代码的ajax调用
  • 您的web服务器(以及php代码)将保持连接打开一段时间,直到作业完成或达到时间限制(比如20-30秒)
  • 如果任务没有完成,javascript将进行另一个ajax调用,一切将重新开始,保持连接,等等。。。在获得预期的输出状态之前
注意:此解决方案在任何主机提供商上都不起作用

您需要将
max\u execution\u time
设置为比默认值更高的值,请参见本部分


我认为您可以在google/stack overflow上使用php/javascript进行http长轮询,这取决于您试图实现什么,您能解释一下吗?最初(代码未显示)我触发一个作业(到集群)。作业信息存储在数据库中。作业完成后,它会将状态写入数据库。使用上面的代码,我检查数据库中的更改。问题是,这项工作可能需要一些时间才能完成(1分钟-15分钟),好的,所以您只需要使用php来知道这项工作是在控制台中完成的,对吗?或者这个脚本是在Web服务器上运行的?是的。然后,我将获取作业的输出并将其呈现到屏幕上。