Выход из команды php без запуска функций выключения
Как выйти из скрипта php (например, с помощью функции exit()), но не вызывая все ранее зарегистрированные функции завершения работы (с помощью register_shutdown_function)?
Спасибо!
РЕДАКТИРОВАТЬ: в качестве альтернативы, есть ли способ очистить от всех зарегистрированных функций выключения?
2 ответа
Решение
Функции выключения не будут выполняться, если процесс завершается с помощью сигнала SIGTERM или SIGKILL.
posix_kill(posix_getpid(), SIGTERM);
Не используйте register_shutdown_function напрямую. Создайте класс, который управляет всеми функциями завершения работы и который имеет свою собственную функцию и свойство enable.
class Shutdown {
private static $instance = false;
private $functions;
private $enabled = true;
private function Shutdown() {
register_shutdown_function(array($this, 'onShutdown'));
$this->functions = array();
}
public static function instance() {
if (self::$instance == false) {
self::$instance = new self();
}
return self::$instance;
}
public function onShutdown() {
if (!$this->enabled) {
return;
}
foreach ($this->functions as $fnc) {
$fnc();
}
}
public function setEnabled($value) {
$this->enabled = (bool)$value;
}
public function getEnabled() {
return $this->enabled;
}
public function registerFunction(callable $fnc) {
$this->functions[] = $fnc;
}
}