Я новичок в php, и я хочу управлять скриптом php while loop, используя кнопки (start/stop), кнопка запуска делает ajax-вызов для start.php сценарий, который определяет $_SESSION['loop'] = TRUE
и выполняет цикл, кнопка остановки делает вызов ajax для сценария stop.php, который просто меняет $_SESSION['loop']
на FALSE
.Изменить переменную SESSION для остановки «while loop»
Ниже приведен мой код, но когда я нажал кнопку остановки, я стал предупреждением (успешная остановка) только после цикла петли цикла, означающего, что цикл не сломался, как я предполагал.
Я думаю, что это что-то с сеансом, который заблокирован во время выполнения цикла. Если да, то как изменить значение $_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;
}
?>
Да, ваш цикл не остановится после завершения или до истечения времени выполнения PHP, также новое значение SESSION не будет доступно для страницы в середине процесса ... поэтому вы не можете сделать что-то вроде этого – 2013-03-25 13:23:48
@Akam, любое предложение о том, как этого достичь? – thesubroot
Вместо этого используйте систему хранения базы данных и продолжайте повторную проверку внутри цикла. IE каждый 'if ($ _ SESSION ['loop'] ..' должен быть запросом выбора sql и '$ _SESSION ['loop'] = ..' должен быть запросом обновления sql – Waygood