首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将会话变量更改为停止"while循环“

问将会话变量更改为停止"while循环“
EN

Stack Overflow用户
提问于 2013-03-25 13:21:03
回答 3查看 1.4K关注 0票数 2

我对php很陌生,我想控制php循环脚本,使用按钮( start / stop ),start按钮对定义start.php并执行循环的$_SESSION['loop'] = TRUE脚本进行ajax调用,stop按钮对只将$_SESSION['loop']更改为FALSE的stop.php脚本进行ajax调用。

下面是我目前为止的代码,但当我按下“停止”按钮时,只有在while循环完成循环之后,我才会发出警告(成功停止),这意味着循环没有像我假设的那样中断。

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

index.php

代码语言:javascript
复制
<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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?php
    session_start();

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

回答 3

Stack Overflow用户

发布于 2013-03-25 13:23:55

您的开始操作和停止操作是在两个不同的会话中进行的,因此在一个会话中更改$SESSION与另一个没有区别。

票数 1
EN

Stack Overflow用户

发布于 2013-03-25 13:26:01

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

票数 0
EN

Stack Overflow用户

发布于 2013-03-25 13:31:06

请花点时间读一读:

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

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

因此,看来$_ session‘循环’在结束时被写入会话文件。

如果要显式地将数据写入会话文件,请在$_ session_write_close‘循环’= TRUE之后添加数据。注意,如果需要在同一个脚本中再次读取/写入某些会话数据,则需要启动会话,然后读取/写入数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15616019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档