есть скрипт, который необходимо останавливать по клику кнопки отмены.
сейчас для этого я держу в базе запись "cancel 1/0" и во время работы скрипта в цикле дергаю эту запись и проверяю значение cancel.
при старте скрипта устанавливаю cancel 1.
юзер кликает кнопку, cancel меняется с 1 на 0.
если 0, то делаю return и скрипт останавливается.
целесообразен ли этот метод? или лучше присмотреться к каким ниубдь другим вариантам? например файлы-флаги.
Ваш вариант вполне рабочий, но для каждого экземпляра запущенного скрипта будет нужна отдельная запись в базе. Вообще такая запись есть уже в самой ос -- это pid запущенного процесса. Зная pid, в процесс можно послать сигнал, который можно обработать и завершить работу.
Вот например такой скрипт
<?php
pcntl_async_signals(true); // без этого обработчик не заработает
echo getmypid(), "\n";
$term = false;
pcntl_signal(SIGTERM, function() use(&$term) {
$term = true;
});
while (!$term) {
echo date("H:i:s\n");
sleep(5);
}
echo "Bye!\n";
Если его запустить php main.php, то он будет висеть в бесконечном цикле. Если вызвать kill pid, то сработает обработчик и процесс завершится.
В любом случае принцип такой: запущенный скрипт как-то идентифицируется, ему передаётся сообщение о необходимости завершить работу.
сделал файлы-флаги, в которых записан статус работы скрипта
Сборка персонального компьютера от Artline: умный выбор для современных пользователей