Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当一个事件被触发时,我需要在x时间段后检查一些东西?_Php_Html_Mysql - Fatal编程技术网

Php 当一个事件被触发时,我需要在x时间段后检查一些东西?

Php 当一个事件被触发时,我需要在x时间段后检查一些东西?,php,html,mysql,Php,Html,Mysql,我需要一些关于最好的方法的建议。我正在开发一个监视数据流并将其添加到数据库的web应用程序。然后,它根据规则集检查特定标准。如果满足其中一个条件,则需要在x分钟后对同一条目运行特定查询。(x由用户配置设置) 我在想一种方法是让它创建cron工作,但首先,我不知道如何做到这一点,其次,我想知道是否有更好的方法 收到条目->匹配条件->等待X分钟->执行另一个查询 我需要它在不暂停脚本的情况下执行此操作,因为大量数据将进入,因此如果等待10分钟,它将无法处理所有数据 谢谢 第一个也是最简单的方法:

我需要一些关于最好的方法的建议。我正在开发一个监视数据流并将其添加到数据库的web应用程序。然后,它根据规则集检查特定标准。如果满足其中一个条件,则需要在x分钟后对同一条目运行特定查询。(x由用户配置设置)

我在想一种方法是让它创建cron工作,但首先,我不知道如何做到这一点,其次,我想知道是否有更好的方法

收到条目->匹配条件->等待X分钟->执行另一个查询

我需要它在不暂停脚本的情况下执行此操作,因为大量数据将进入,因此如果等待10分钟,它将无法处理所有数据

谢谢

第一个也是最简单的方法: 学习工作

第二种方式: 如果要等待10分钟而不停止脚本执行,则用户必须等待10分钟

如果希望在不打扰用户的情况下执行此操作,可以创建一个子进程来处理此操作。该过程不会停止,但与用户的交互将结束。在子进程中,您可以暂停脚本10分钟

如何创建子进程:


如何暂停流程:

我使用JS/JQuery和PHP为自己解决了类似的问题。下面是它的一种伪代码:

  pingTimer = 0;
  function pingTimerIncrement() {
     //your criterias to be checked here either using plain 
     //JS or AJAX to do it on server side
     if (criterias met) {
       pingTimer += 1; //increase by 1 minute

       if (pingTimer == YOUR_USER_CONFIG_MINUTES) {
          //code to update your database using ajax
       }
     }
  }

  $(function() {
     var timerInterval = setInterval("pingTimerIncrement()", 6000); //1 minute
  });

另一种方法是,如果您不想使用JS/JQuery,那么就使用cronjob

如果有许多类似的任务,您可以为任务创建一个表,并在需要时填充它


然后,每分钟运行一次的cron脚本可以从该表中选择执行时间小于或等于当前时间的所有条目并运行它们。

不要创建多个cron作业

将用户配置存储为时间戳(将来),并具有一个频繁运行的cron作业(最多每1分钟一次),并将查询用户配置列表以查看是否需要执行另一个查询

存储cron作业的最后执行时间,并让它查询列表-

SELECT * FROM `pending_queries` WHERE `execution_ts` <= {$last_execution_ts}

最后,在处理完一个查询后,您应该将其从
pending_querys
表中删除。

我喜欢这个想法,您对它进行了格式化并进行了很好的解释。谢谢我会的it@con-很乐意帮忙!快乐编码!
SELECT * FROM `pending_queries` WHERE 
  `execution_ts` <= {$last_Execution_ts} AND `is_processing`=0