Не удается прервать скрипт

Статус
Закрыто для дальнейших ответов.

zjiodeu

Active Member
Регистрация
24.07.2011
Сообщения
25
Никогда не думал, что могут возникнуть проблемы подобного рода)
Собственно, есть скрипт , который в бесконечном цикле выполняет определённые операции. Записывает/читает данные из сокета и пишет в БД. Время работы скрипта не ограничено:
Код:
 set_time_limit(0);
Есть чудо-интерфейс в отдельном скрипте с большой кнопкой "Стоп". При нажатии на неё генерируется асинхронный POST-запрос, который я успешно отлавливаю в цикле и вызываю break( а также пробовал die, exit). После чего скрипт всё равно продолжает работать :blink:

Фрагмент скрипта:

Код:
set_time_limit(0);
   $output = new output();
   $db = new dbconnector();
  
   // $output->getData($_POST["ip"],$_POST["port"],$_POST["hello"]);
$output->getData('127.0.0.1','2711','55 19 19 3f');
  

while(1){
if (isset($_POST["stop"]))
   break;
    $output->build();    //get Values from socket
    $db->write(); //// write to the database
  //  $db->read();  //read last value
sleep(1);
}
JS:
Код:
function stopWork(){ //прерывание таймера, очистка базы данных.

clearInterval(T);

try{
  window.saveResponse.length=0; //обнуляем массив возвращаемых значений Q
    window.graph.close(); ///закрываем окно с фулл графом
}
catch(e){}



$.ajax({
  url:"cron.php",
  type:"POST",
  data:{
   stop:true
  }
  /*success: function(data){
    alert("Мониторинг остановлен");
   // Включаем возможность менять FIQ
$("#divfiq input").removeAttr("disabled");
  }*/
});
}
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
Если вкратце, то cron.php должен выглядеть примерно так:

Код:
if ( isset($_POST["stop"]) ) {
  file_put_contents('stop.txt', '');
  die();
}

set_time_limit(0);
$output = new output();
$db = new dbconnector();

// $output->getData($_POST["ip"],$_POST["port"],$_POST["hello"]);
$output->getData('127.0.0.1','2711','55 19 19 3f');


while(1) {
  if ( file_exists('stop.txt') ) {
    unlink('stop.txt');
    break;
  }

  $output->build(); //get Values from socket
  $db->write(); //// write to the database
  // $db->read(); //read last value
  sleep(1);
}
 

zjiodeu

Active Member
Регистрация
24.07.2011
Сообщения
25
[member=brevis],
А можете пояснить, что вы имели в виду?) пока что этот код выглядит для меня немного странно.
Разве цикл while нельзя прервать другими методами?
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
Важно понимать, что конопка "Стоп" запускает ещё один процесс cron.php, а не шлет запрос уже работающему cron.php. Таким образом у нас получается 2 процесса cron.php и нам нужно как-то из второго процесса "сообщить" первому что бы тот завязывал. Выше я показал самый простой способ сделать это.
 

zjiodeu

Active Member
Регистрация
24.07.2011
Сообщения
25
Важно понимать, что конопка "Стоп" запускает ещё один процесс cron.php, а не шлет запрос уже работающему cron.php. Таким образом у нас получается 2 процесса cron.php и нам нужно как-то из второго процесса "сообщить" первому что бы тот завязывал. Выше я показал самый простой способ сделать это.
Ломка мировозрения) Спасибо.
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Про остановку понятно:) А приостановить как-то можно скрипт? Типа "пауза" и потом снова продолжить?
 
Статус
Закрыто для дальнейших ответов.
Верх Низ