我对php很陌生,我想控制php循环脚本,使用按钮( start / stop ),start按钮对定义start.php并执行循环的$_SESSION['loop'] = TRUE脚本进行ajax调用,stop按钮对只将$_SESSION['loop']更改为FALSE的stop.php脚本进行ajax调用。
下面是我目前为止的代码,但当我按下“停止”按钮时,只有在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;
}
?>发布于 2013-03-25 13:23:55
您的开始操作和停止操作是在两个不同的会话中进行的,因此在一个会话中更改$SESSION与另一个没有区别。
发布于 2013-03-25 13:26:01
我认为,你应该用多线程来做这样的事情。
发布于 2013-03-25 13:31:06
请花点时间读一读:
会话数据通常在脚本终止后存储,不需要调用session_write_close(),但是由于会话数据被锁定以防止并发写入,因此在任何时候只有一个脚本可以对会话进行操作。
http://php.net/manual/en/function.session-write-close.php
因此,看来$_ session‘循环’在结束时被写入会话文件。
如果要显式地将数据写入会话文件,请在$_ session_write_close‘循环’= TRUE之后添加数据。注意,如果需要在同一个脚本中再次读取/写入某些会话数据,则需要启动会话,然后读取/写入数据。
https://stackoverflow.com/questions/15616019
复制相似问题