есть скрипт, который необходимо останавливать по клику кнопки отмены.
сейчас для этого я держу в базе запись "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
, то сработает обработчик и процесс завершится.
В любом случае принцип такой: запущенный скрипт как-то идентифицируется, ему передаётся сообщение о необходимости завершить работу.
сделал файлы-флаги, в которых записан статус работы скрипта
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Выдает ошибку при переходе на роут /catalog/{id}Пытался сделать вывод заголовка соответствующей категории, но видимо что то сделал не так, подскажите...
Модель последовательной согласованности используется по умолчанию в атомарных операцияхОднако, она фактически организовывает работу с атомарными...
В с++ в структуре элементам присваивается ноль, а когда я пытаюсь сделать это в си, мне выдает ошибку, как можно исправить/заменить?
У меня такая проблема: мне нужно сдвинуть все элементы массива влево на 2То есть если начальный массив {1, 2, 3, 4, 5}, то должно получиться {3, 4, 5, 1, 2}