Выход из команды 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;
    }

}
Другие вопросы по тегам