更改SESSION变量以停止“while循环”

时间:2013-03-25 13:21:03

标签: php ajax

我是php新手,我想控制一个php while循环脚本,使用按钮(开始/停止),开始按钮对 start.php 脚本进行ajax调用$_SESSION['loop'] = TRUE并执行循环,停止按钮对 stop.php 脚本进行ajax调用,该脚本只需将$_SESSION['loop']更改为FALSE

到目前为止,下面是我的代码,但是当我按下停止按钮时,只有在while循环完成循环后才成为警告(成功停止),这意味着循环没有因为我而破坏假设。

我认为这是在循环执行时被锁定的会话。如果是这样,如何更改$_SESSION['loop']值并让循环读取该值每个时间?

的index.php

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $('#start').click(function(){
            $.ajax({
                url: "start.php"
            });
        });

        $('#stop').click(function(){
            $.ajax({
                url: "stop.php",
                success: function(){
                    alert('success stop');
                },
                error: function(){
                    alert('failure stop');
                }
            });
        });
    });
</script>

<button id="start">Start</button>
<button id="stop">Stop</button>

start.php

<?php
    session_start();
    $_SESSION['loop'] = TRUE;

    ini_set('max_execution_time', 300);
    $i = 0;
    while($i < 100) {

        if ($_SESSION['loop'] == TRUE) {

            //query to save some variables

            // Pause 10s after saving 2
            if ($i != 0 && $i%2 == 0) {
                sleep(10);
            }

            $i++;

        } else {
            break;
        }
    }
?>

stop.php

<?php
    session_start();

    if(isset($_SESSION['loop'])) {
        $_SESSION['loop'] = FALSE;
    }
?>

3 个答案:

答案 0 :(得分:1)

您的开始和停止操作分为两个不同的会话,因此将$ SESSION改为一个会对另一个没有影响。

答案 1 :(得分:0)

我认为,你应该使用多线程来做这些事情。

答案 2 :(得分:0)

请花些时间阅读:

“会话数据通常在脚本终止后存储而不需要调用session_write_close(),但由于会话数据被锁定以防止并发写入,因此任何时候只有一个脚本可以在会话上运行。”

http://php.net/manual/en/function.session-write-close.php

因此,似乎$ _SESSION ['loop']最后被写入会话文件。

如果要将数据显式写入会话文件,请在$ _SESSION ['loop'] = TRUE之后添加session_write_close。注意,如果您需要在同一个脚本中再次读/写一些会话数据,则需要启动会话然后读/写数据。