php在运行时停止执行

时间:2012-02-14 14:36:37

标签: php

我有一个脚本来刮一页。脚本运行时,需要3个小时才能完成。 我想在按下它时构建一个按钮,脚本必须停止运行。

有人有想法吗?

4 个答案:

答案 0 :(得分:1)

正在运行的脚本是网页吗?

基本上你可以用停止按钮做的就是向网络服务器发送另一个请求(只是停止加载网页不会停止在服务器上运行的请求)。这个其他请求(由另一个PHP线程/进程处理)需要让第一个进程知道它需要停止。进程间(/线程)通信的一种简单方法是让第二个脚本在/ tmp /目录中创建一个文件,并让第一个进程不时地查找该文件。如果第一个进程看到该文件存在,则应该中止处理并删除该文件。为了更健壮,它还应该在启动时删除文件(如果存在)。注意:查看文件是否存在(在linux中)非常快。它不会击中硬盘(因为它将被缓存)。在你真正开始每秒1000次以上之前,你甚至都不会注意到额外的延迟。

显然,这只有在第二个进程在PHP中循环时才有效。如果第二个进程执行一个需要3个小时的SQL查询,则它不能每秒查找一次该文件。在这种情况下,您需要对信号执行某些操作,终止第一个过程,请参阅http://php.net/manual/en/function.posix-kill.php

答案 1 :(得分:0)

您无法阻止PHP脚本运行。您可以停止客户端的浏览器等待响应,但PHP / Apache进程仍将在后台运行,直到它完成或遇到错误。

如果您只想停止浏览器,那么Sandeep Bansal的答案应该可以解决问题。

答案 2 :(得分:0)

可以通过ajax完成。 将此代码放到html头:

    <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script>
    <script language='javascript' type='text/JavaScript'>
        {
            function stop_script() {
                $.post('stopScript.php');
            }
        }    
    </script>

并将按钮添加到您的html正文

<button onclick="stop_script()">Stop</button>

这是您的stopScript.php

<?php
   session_start();
   $_SESSION["stop_flag"] = "true";
?>

并检查您的php脚本循环中的会话

session_start();
if(isset($_SESSION["stop_flag"]) && $_SESSION["stop_flag"] == "true")exit(0);

或者您可以使用mysql数据表代替会话。我使用了数据表,它对我来说很好用。

答案 3 :(得分:-1)

<input type="button" value="Stop" onclick="window.stop()">

使用Window.stop,它将停止处理页面