我有一个sqlite数据库,我定期从PHP查询。查询始终相同,它返回一个字符串。一旦字符串在数据库中发生变化,循环就会结束。
以下代码正常运行,但我很确定这不是执行此操作的最佳方式...
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();
}
答案 0 :(得分:2)
如果你想立即得到一个输出和一种接口,我认为你的问题的最佳解决方案可能是使用HTTP长轮询。这样,如果没有完成工作,它将不会持续数小时:
请注意:此解决方案不适用于任何托管服务提供商
为此,您需要将max_execution_time
设置为高于默认值php doc。
我认为你可以在google / stack overflow上使用php / javascript在http长轮询中找到很多东西......