一旦外部事件启动,是否可以取消循环的执行

时间:2015-01-30 10:15:01

标签: php mysql ajax

我正在使用php和mysql以及AJAX开发一个Web应用程序。在我的一个脚本中有一个从mysql表中获取数据的规定。但是,如果我想在执行过程中取消执行我正在调用的PHP脚本来获取数据呢?让我更清楚一点。就像说由于循环繁重而需要30分钟才能完成一个AJAX调用,我想在完成之前通过单击某个按钮退出该调用。我怎样才能实现这一目标。否则,我的脚本运行良好,除非它挂起,如果我不想等待最终的AJAX响应文本并尝试切换到Web应用程序的其他页面。

2 个答案:

答案 0 :(得分:0)

您可以像这样创建脚本:

$someStorage->set($sessionId . '_someFuncStop', true);

当按下STOP按钮时,通过AJAX调用它。

在带循环的脚本中检查存储中的var

while(1) {
    if ($someStorage->get($sessionId . '_someFuncStop') === true ) break;
}

答案 1 :(得分:0)

据我所知,PHP不支持某种可以通过外部原因中断运行脚本的事件监听器。

您可能需要考虑两条路径(如果您不想在服务器上编写可以终止执行脚本的系统进程的shell脚本):

  1. ignore_user_abort 功能,这不是100%可靠
  2.   

    http://php.net/manual/en/function.ignore-user-abort.php

    1. 在你希望终止的循环中,创建一个数据库调用(或从文件中读取),你可以在其中设置某种标志,如果设置了该标志,则运行一个中断/返回/ die命令在脚本中。您提到的按钮然后可以写入数据库/文件并设置中断标志。 (通常这对于脚本中断并不是很有用,因为大多数脚本在几十毫秒内运行,并且标志的设置速度不足以终止脚本,但在几十分钟内,这是一个可行的解决方案。)