gpt4 book ai didi

PHP 和 jQuery : Return incremental results as search runs

转载 作者:搜寻专家 更新时间:2023-10-31 21:43:37 24 4
gpt4 key购买 nike

我需要在 PHP 中处理一个运行时间很长的进程(grepping 大文本文件并返回匹配行)。当我们从命令行运行平均查询时,该过程可能需要 10-15m。

我想在 PHP/jQuery 中实现,因此我开始查询,然后在结果返回时显示增量结果。

我实现了一些接近的东西,其中我有一个 ajax 调用来执行搜索(工作正常),并且有一个周期性计时器函数正在运行,调用类中的第二个方法来获取结果。但是,我意识到第二次调用实际上会创建一个新的类实例,因此主查询和周期更新计时器之间的 $this->current 是不同的。

这是我正在尝试的 javascript(我在单击表单按钮时启动它):

<script>
function update_status(data) {
alert(data);
jQuery.each(data, function(key, val) {
if ( key == "progress" )
$("#progressbar").progressbar({ value: val });
});
}
function progress_setup() {
setInterval(function() {
jQuery.ajax({
type:'POST',
dataType:'json',
complete:function(XMLHttpRequest, textStatus){
update_status(textStatus)
},
url:'<?php echo url_for("@grep_status"); ?>'
})},
2000);
}
function grep(elements) {
jQuery.ajax({
type:'POST',
dataType:'html',
data:jQuery(elements).serialize(),
success:function(data, textStatus){jQuery('#results').html(data);},
beforeSend:function(XMLHttpRequest){progress_setup()},
url:'/grep'});
}

</script>

但是,这似乎不是正确的轨道。核心问题似乎是:

  1. PHP 中的长时间运行任务
  2. 如何将该任务的状态返回到进度条和增量结果对话框?

TIA迈克

最佳答案

您必须使用数据库或文件共享您的操作状态。然后在您的 /grep 操作中,您定期将状态写入数据库或文件(更新状态)。

然后您需要另一个脚本(如 /grep_state)来读取状态并将其返回给客户端。

您不能做的是使用 PHP 对象实例共享状态,因为它的范围仅限于单个请求。你必须坚持这个状态。

另一个问题可能是您的长时间运行的任务由于网络服务器或浏览器的请求超时而终止。我要么在 CLI 模式下运行脚本(与网络服务器/请求分离),要么编写一个作为守护进程运行的简单作业调度程序。

守护进程从套接字(或与其他进程通信的任何其他方式)获取参数,并使用您的工作脚本启动 php-CLI。状态也使用文件或数据库共享。

关于PHP 和 jQuery : Return incremental results as search runs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7266257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com